Answers:
使用时,->get()
您不能简单地使用以下任何一种:
if (empty($result)) { }
if (!$result) { }
if ($result) { }
因为即使您没有结果,也可以始终返回dd($result);
的实例Illuminate\Support\Collection
。本质上,您要检查的是$a = new stdClass; if ($a) { ... }
始终返回true的内容。
要确定是否有任何结果,您可以执行以下任一操作:
if ($result->first()) { }
if (!$result->isEmpty()) { }
if ($result->count()) { }
if (count($result)) { }
您也可以在查询生成器上使用,->first()
而不是->get()
在查询生成器上使用,null
否则它将返回第一个找到的模型的实例。如果您只需要或期望从数据库中获得一个结果,这将很有用。
$result = Model::where(...)->first();
if ($result) { ... }
注释/参考
->first()
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)
之所以起作用,是因为Collection实现了Countable和一个内部count()
方法:http : //laravel.com/api/4.2/Illuminate/Database/Eloquent/Collection.html#method_count对于Laravel的新手来说,Collection和Query Builder的差异可能会有些混乱,因为两者之间的方法名称通常是相同的。因此,知道您正在从事的工作可能会令人困惑。在您调用一个将在其中执行查询并访问数据库的方法之前,查询生成器实质上会构建查询(例如,当您调用诸如->all()
->first()
->lists()
和其他方法之类的某些方法时)。这些方法也存在于Collection
对象上,如果有多个结果,则可以从查询生成器中返回这些方法。如果不确定实际使用的是哪个类,请尝试进行var_dump(User::all())
尝试以查看其实际返回的类(在get_class(...)
)。我强烈建议您查看Collection类的源代码,这很简单。然后检出查询生成器,查看函数名称的相似之处,并找出它实际何时到达数据库。
Model::first()
-它实际上是在查询生成器的“第一个”方法而不是集合上起作用,因此它将从数据库中选择第一个方法-但是Model::get()
将返回Illuminate \ Support的实例\ Collection,所以如果您这样做了$r = Model::get()
,$r->first()
它将选择该集合中的第一项。
count($result)
有效。添加该细节将是一个改进。
foreach
然后使用这些检查之一(请考虑:)count($collection->column)
。
我认为您正在寻找:
$result->isEmpty()
这与有所不同empty($result)
,后者将不成立,因为结果将是一个空集合。您的建议count($result)
也是一个很好的解决方案。我在文档中找不到任何参考
Laravel中提供了几种检查结果计数/检查为空/不为空的方法:
$result->isNotEmpty(); // True if result is not empty.
$result->isEmpty(); // True if result is empty.
$result->count(); // Return count of records in result.
我觉得更好用
$result->isEmpty();
如果集合为空,则isEmpty方法返回true;否则,返回true。否则,返回false。
因此,Laravel实际上在Model::all();
不使用集合就需要数组时会返回一个集合,因此您可以键入set。
(array)Model::all();
然后您可以使用array_filter返回结果
$models = (array)Model::all()
$models = array_filter($models);
if(empty($models))
{
do something
}
这也可以让你做类似的事情count()
。
- - - 解决了 - - -
在这种情况下,您要检查两个cace的两种计数
情况1:
如果结果仅包含一个记录,则其他单词使用-> first()从数据库中选择一行
if(count($result)){
...record is exist true...
}
情况2:
如果结果包含一组多行其他单词,则使用-> get()或-> all()
if($result->count()) {
...record is exist true...
}
first()
,结果不同于get()
,可以检查!$result
为空,结果为null