这可能是一个无关紧要的问题,但我想知道Laravel是否推荐某种方法来检查从$result=Model::where(…)->;返回的有说服力的集合;get()
为空,并计算元素数
我们目前正在使用$结果
检测空结果,是否足够?至于count($result)
,它实际上是否涵盖了所有情况,包括空结果
使用->;get()
您不能简单地使用以下任何一项:
if(空($result)){
如果(!$result){}
如果($result){}
因为如果你dd($result)
您会注意到,即使没有结果,也会始终返回illumb\Support\Collection
的一个实例。基本上,您要检查的是$a=newstdclass;if($a){…}
,它将始终返回true
要确定是否有任何结果,可以执行以下任一操作:
如果($result->;first()){
如果(!$result->;isEmpty()){}
如果($result->;count()){}
如果(计数($result)){}
您也可以使用->;首先()
而不是->;在查询生成器上获取()
,它将返回第一个找到的模型的实例,否则为null
。如果您需要或只希望从数据库中得到一个结果,这将非常有用
$result=Model::where(…)->;第一个();
如果($result){…}
注释/参考资料
->;第一个()
http://laravel.com/api/4.2/Illuminate/Database/Eloquent/Collection.html#method_firstisEmpty()
http://laravel.com/api/4.2/Illuminate/Database/Eloquent/Collection.html#method_isEmpty->;count()
http://laravel.com/api/4.2/Illuminate/Database/Eloquent/Collection.html#method_countcount($result)
之所以有效,是因为集合实现了可计数和内部count()
方法:http://laravel.com/api/4.2/Illuminate/Database/Eloquent/Collection.html#method_count
奖金信息
集合和查询生成器的差异可能会让Laravel的新手感到有点困惑,因为两者的方法名称通常相同。出于这个原因,知道你在做什么可能会让人困惑。查询生成器基本上构建一个查询,直到您调用一个方法执行查询并访问数据库为止(例如,当您调用某些方法时,例如->;all()
->;first()
->;list()
和其他方法)。这些方法也存在于集合
对象上,如果有多个结果,可以从查询生成器返回。如果您不确定实际使用的是什么类,请尝试执行var\u dump(User::all())
并尝试查看它实际返回的类(借助get\u class(…)
)。我强烈建议您查看Collection类的源代码,它非常简单。然后查看查询生成器,查看函数名中的相似之处,并找出它实际到达数据库的时间
- Laravel 5.2收集类
- Laravel 5.2查询生成器