雄辩的收集:计数和检测空

这可能是一个无关紧要的问题,但我想知道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_first
  • isEmpty()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_count
  • count($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查询生成器

发表评论