这可能是一个微不足道的问题,但我想知道Laravel是否建议某种方法来检查从$result = Model::where(...)->get()
返回的Eloquent集合是否为空,以及计算元素的数量。
我们目前正在使用!$result
来检测空结果,这还够吗?对于count($result)
,它是否实际涵盖了所有情况,包括空结果?
答案 0 :(得分:480)
使用->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_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)
有效,因为该集合实现了Countable和内部count()
方法:http://laravel.com/api/4.2/Illuminate/Database/Eloquent/Collection.html#method_count Collection和Query Builder的差异对于Laravel的新手来说可能有点混乱,因为方法名称在两者之间通常是相同的。出于这个原因,知道你正在做什么可能会令人困惑。查询构建器实质上构建一个查询,直到您调用一个方法来执行查询并命中数据库(例如,当您调用->all()
->first()
->lists()
等其他方法时。这些方法也存在于Collection
对象上,如果有多个结果,可以从查询生成器返回。如果您不确定您实际使用的是什么课程,请尝试var_dump(User::all())
并尝试查看实际返回的课程(借助get_class(...)
)。我强烈建议您查看Collection类的源代码,它非常简单。然后查看查询生成器并查看函数名称中的相似之处,并找出它何时实际访问数据库。
答案 1 :(得分:61)
我认为你在寻找:
$result->isEmpty()
这与empty($result)
不同,后者不会成立,因为结果将是一个空集合。您对count($result)
的建议也是一个很好的解决方案。我在文档中找不到任何引用
答案 2 :(得分:9)
我同意以上批准的答案。但通常我使用$results->isNotEmpty()
方法,如下所示。
if($results->isNotEmpty())
{
//do something
}
它比if(!results->isEmpty())
更冗长,因为有时我们会忘记添加'!'在前面可能会导致意外错误。
请注意,此方法从版本5.3开始存在。
答案 3 :(得分:2)
Laravel中提供了几种方法来检查结果计数/检查空/非空:
$result->isNotEmpty(); // True if result is not empty.
$result->isEmpty(); // True if result is empty.
$result->count(); // Return count of records in result.
答案 4 :(得分:2)
我认为您可以尝试
function roundit(which){
return Math.round(which*100)/100
}
function cmconvert(){
with (document.cminch){
Heightft.value = roundit(Heightcm.value/30.84);
HeightIn.value = roundit(Heightcm.value/2.54);
}
}
function inchconvert(){
with (document.cminch){
Heightcm.value = roundit(HeightIn.value*2.54);
Heightft.value=roundit(HeightIn.value/12);
}
}
function feetconvert(){
with (document.cminch){
Heightcm.value=roundit(Heightft.value*30.48);
HeightIn.value=roundit(Heightft.value*12);
}
}
或也使用
@if(!$result->isEmpty())
// $result is not empty
@else
// $result is empty
@endif
答案 5 :(得分:2)
我觉得更好用
$result->isEmpty();
如果集合为空,则isEmpty方法返回true;否则,返回true。除此以外, 返回false。
答案 6 :(得分:1)
你可以做到
$result = Model::where(...)->count();
计算结果。
您也可以使用
if ($result->isEmpty()){}
检查结果是否为空。
答案 7 :(得分:1)
您可以使用: $counter = count($datas);
答案 8 :(得分:0)
<强> ------ ------解决强>
在这种情况下,您要检查两种类型的计数为两个cace
案例1:
如果结果只包含一个记录,则使用 - &gt; first()
从数据库中选择单行 if(count($result)){
...record is exist true...
}
案例2:
如果结果包含多行其他单词的集合使用 - &gt; get()或 - &gt; all()
if($result->count()) {
...record is exist true...
}
答案 9 :(得分:0)