我正在使用laravel框架项目并面临以下问题。
查询:
$query = DB::table('test');
$query->select('*');
$query->where('testId = 1');
$result = $query->get();
print_r($result);
输出
Illuminate\Support\Collection Object
(
[items:protected] => Array
(
)
)
现在我正在检查$result
是否有记录。
if(empty($result))
{
echo "Not Empty check with empty()";
}
if(count($result) == 0)
{
echo "Not Empty check with count()";
}
输出:
Not Empty check with count()
问题:
我在所有项目中都使用了empty()
,但在 laravel框架项目中,我无法知道为什么$result
进入count()
条件,没有进入empty()
。
注意:
我已经读过count()与empty()比较慢也是空的()检查变量是否设置所以我在所有返回数组或对象数组中使用empty()。
请帮助别人。
提前致谢!
答案 0 :(得分:3)
如果您使用集合,则可以使用isEmpty()
方法
docs:https://laravel.com/docs/5.4/collections#method-isempty
答案 1 :(得分:2)
使用->get()
方法,您将获得一个集合实例。
当您对从get方法获取的数据应用empty()
时,即使没有结果,您也会注意到始终会返回Illuminate\Support\Collection
的实例。
使用->get()
方法获取数据时,您无法简单地使用以下内容,
if(empty($data)){
}
if(!data){
}
if($data){
}
而不是上面你可以简单地使用,
isEmpty($data) or
count($data) or
$data->count()
答案 2 :(得分:1)
来自php docs
确定变量是否为空。如果变量不存在或者其值等于FALSE,则该变量被视为空。如果变量不存在,empty()不会生成警告。
laravel集合类实现Countable interface,允许您使用count
函数。如果您检查集合类,则会看到count
方法返回内部项的计数。
empty
函数没有接口,因此在这种情况下,它只检查变量是否未设置或等于false
,如果检查对象,则显然不适用the None
答案 3 :(得分:0)
条件试试这个:
if(empty($result->toArray()))
{
echo "Not Empty check with empty()";
}
if(count($result) == 0)
{
echo "Not Empty check with count()";
}