这可能是一个微不足道的问题,但我想知道 Laravel 是否推荐某种方法来检查从 Eloquent 集合返回的是否$result = Model::where(...)->get()
为空,以及计算元素的数量。
我们目前!$result
用来检测空结果,够了吗?至于count($result)
,它实际上是否涵盖了所有情况,包括空结果?
这可能是一个微不足道的问题,但我想知道 Laravel 是否推荐某种方法来检查从 Eloquent 集合返回的是否$result = Model::where(...)->get()
为空,以及计算元素的数量。
我们目前!$result
用来检测空结果,够了吗?至于count($result)
,它实际上是否涵盖了所有情况,包括空结果?
使用时,->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_countCollection 和 Query Builder 的区别可能会让 Laravel 的新手感到困惑,因为两者之间的方法名称通常相同。出于这个原因,知道你在做什么可能会让人困惑。Query Builder 本质上是构建一个查询,直到您调用一个方法,它将执行查询并访问数据库(例如,当您调用某些方法->all()
->first()
->lists()
和其他方法时)。这些方法也存在于Collection
对象上,如果有多个结果,可以从查询生成器返回。如果您不确定您实际使用var_dump(User::all())
的是什么课程,请尝试执行并尝试查看它实际返回的课程(借助get_class(...)
)。我强烈建议您查看 Collection 类的源代码,它非常简单。然后查看查询构建器并查看函数名称的相似之处,并找出它何时真正到达数据库。
我认为您正在寻找:
$result->isEmpty()
这与 不同empty($result)
,后者不成立,因为结果将是一个空集合。您的建议count($result)
也是一个很好的解决方案。我在文档中找不到任何参考
我同意上述批准的答案。但通常我使用$results->isNotEmpty()
下面给出的方法。
if($results->isNotEmpty())
{
//do something
}
它比if(!results->isEmpty())
有时我们忘记添加“!”更冗长。在前面,这可能会导致不必要的错误。
请注意,此方法从5.3版开始存在。
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;否则,返回 false。
我想你尝试类似的东西
@if(!$result->isEmpty())
// $result is not empty
@else
// $result is empty
@endif
或者也使用
if (!$result) { }
if ($result) { }
你可以做
$result = Model::where(...)->count();
计算结果。
你也可以使用
if ($result->isEmpty()){}
检查结果是否为空。
您可以使用: $counter = count($datas);
你想检查这两种情况count()
。
#1
如果结果仅包含数据库中的单行(一条记录),则使用->first()
.
if(count($result)) {
// record is exist true...
}
#2
如果结果包含使用->get()
or的多行(多条记录)集->all()
。
if($result->count()) {
//record is exist true...
}
所以 Laravel 实际上在使用时返回一个集合,Model::all();
你不想要一个集合,你想要一个数组,所以你可以键入 set 它。
(array)Model::all();
然后您可以使用 array_filter 返回结果
$models = (array)Model::all()
$models = array_filter($models);
if(empty($models))
{
do something
}
这也将允许你做类似的事情count()
。
检查数组中in_array()
是否存在值。
public function isAbsolutelyEmpty($value)
{
return in_array($value, ["", "0", null, 0, 0.0], true);
}