这可能是一个微不足道的问题,但我想知道Laravel是否推荐了一种特定的方法来检查从$result = Model::where(…)->get()返回的Eloquent集合是否为空,以及计算元素的数量。
我们目前正在使用!$result来检测空结果,这足够了吗?至于count($result),它实际上涵盖了所有情况,包括空结果吗?
这可能是一个微不足道的问题,但我想知道Laravel是否推荐了一种特定的方法来检查从$result = Model::where(…)->get()返回的Eloquent集合是否为空,以及计算元素的数量。
我们目前正在使用!$result来检测空结果,这足够了吗?至于count($result),它实际上涵盖了所有情况,包括空结果吗?
当前回答
我想你正在寻找:
$result->isEmpty()
这与empty($result)不同,后者不会为真,因为结果将是一个空集合。您建议的count($result)也是一个很好的解决方案。我在文件里找不到任何参考资料
其他回答
in_array()检查数组中是否存在某个值。
public function isAbsolutelyEmpty($value)
{
return in_array($value, ["", "0", null, 0, 0.0], true);
}
我同意以上认可的答案。但通常我使用$results->isNotEmpty()方法如下所示。
if($results->isNotEmpty())
{
//do something
}
它比if(!results->isEmpty())更冗长,因为有时我们会忘记添加'!',这可能会导致不必要的错误。
注意,这个方法从5.3版本开始就存在了。
当使用->get()时,你不能简单地使用以下任何一个:
if (empty($result)) { }
if (!$result) { }
if ($result) { }
因为如果你dd($result);你会注意到一个实例Illuminate\Support\Collection总是被返回,即使没有结果。本质上你检查的是$a = new stdClass;如果($a){…}将总是返回true。
要确定是否有任何结果,您可以执行以下任何操作:
if ($result->first()) { }
if (!$result->isEmpty()) { }
if ($result->count()) { }
if (count($result)) { }
您也可以在查询构建器上使用->first()而不是->get(),后者将返回第一个找到的模型的实例,否则为空。如果您只需要或期望从数据库中得到一个结果,这是非常有用的。
$result = Model::where(...)->first();
if ($result) { ... }
备注/参考资料
- >第()http://laravel.com/api/4.2/Illuminate/Database/Eloquent/Collection.html method_first http://laravel.com/api/4.2/Illuminate/Database/Eloquent/Collection.html method_isEmpty isEmpty () - >数()http://laravel.com/api/4.2/Illuminate/Database/Eloquent/Collection.html method_count count($result)有效,因为Collection实现了Countable和一个内部count()方法:http://laravel.com/api/4.2/Illuminate/Database/Eloquent/Collection.html#method_count
额外的信息
The Collection and the Query Builder differences can be a bit confusing to newcomers of Laravel because the method names are often the same between the two. For that reason it can be confusing to know what one you’re working on. The Query Builder essentially builds a query until you call a method where it will execute the query and hit the database (e.g. when you call certain methods like ->all() ->first() ->lists() and others). Those methods also exist on the Collection object, which can get returned from the Query Builder if there are multiple results. If you're not sure what class you're actually working with, try doing var_dump(User::all()) and experimenting to see what classes it's actually returning (with help of get_class(...)). I highly recommend you check out the source code for the Collection class, it's pretty simple. Then check out the Query Builder and see the similarities in function names and find out when it actually hits the database.
Laravel 5.2集合类 Laravel 5.2查询生成器
你可以使用:$counter = count($data);
您需要检查count()的这两种情况。
#1
如果结果只包含来自数据库的单行(一条记录),则使用->first()。
if(count($result)) {
// record is exist true...
}
#2
如果结果包含多行(多条记录),则使用->get()或->all()。
if($result->count()) {
//record is exist true...
}