这可能是一个微不足道的问题,但我想知道Laravel是否推荐了一种特定的方法来检查从$result = Model::where(…)->get()返回的Eloquent集合是否为空,以及计算元素的数量。

我们目前正在使用!$result来检测空结果,这足够了吗?至于count($result),它实际上涵盖了所有情况,包括空结果吗?


当前回答

我想你正在寻找:

$result->isEmpty()

这与empty($result)不同,后者不会为真,因为结果将是一个空集合。您建议的count($result)也是一个很好的解决方案。我在文件里找不到任何参考资料

其他回答

你可以这样做

$result = Model::where(...)->count(); 

计算结果。

你也可以使用

if ($result->isEmpty()){}

检查结果是否为空。

in_array()检查数组中是否存在某个值。

public function isAbsolutelyEmpty($value)
{
   return in_array($value, ["", "0", null, 0, 0.0], true);
}

所以Laravel实际上是在使用Model::all()时返回一个集合; 你不想要一个集合,你想要一个数组,所以你可以类型设置它。 (数组)模型:所有();然后可以使用array_filter返回结果

$models = (array)Model::all()
$models = array_filter($models);
if(empty($models))
{
 do something
}

这也将允许您执行count()之类的操作。

我想你正在寻找:

$result->isEmpty()

这与empty($result)不同,后者不会为真,因为结果将是一个空集合。您建议的count($result)也是一个很好的解决方案。我在文件里找不到任何参考资料

我同意以上认可的答案。但通常我使用$results->isNotEmpty()方法如下所示。

if($results->isNotEmpty())
{
//do something
}

它比if(!results->isEmpty())更冗长,因为有时我们会忘记添加'!',这可能会导致不必要的错误。

注意,这个方法从5.3版本开始就存在了。