如何解决Laravel Eloquent返回具有空属性的双精度数组 首先第二,第三,
我正在使用Laravel Eloquent查询模型。当有可用记录时,查询将返回一个对象数组的结果。
[{id: 2,num: 3}]
如果没有可用的记录,Eloquent将在对象数组中返回一个数组,其中所有对象属性都为空值。
[[{id: null,num: null}]]
问题是如何测试是否没有记录或空对象。以下方法均无效:
isset($records) // does not cover empty object
!empty($records) // does not seem to see null properties
count($records) > 0 // sees an array more than zero deep
这是我的查询:
$records = FertilAppUser::select('fertilapp.*')
->leftJoin('fertilapp','fertilappuser.id','=','fertilapp.fertilappuser_id')
->where('fertilappuser.id',$request->get( 'id' ))
->groupBy('fertilapp.id')
->orderBy('fertilapp.id','asc')
->get();
必须处理一个空结果,因为这是可能的,这似乎是一件让我感到痛苦的事情。一切正常,然后我测试空结果,并且繁荣出现错误!
有人可以帮助我理解为什么结果是不同深度的数组吗?
如果两者都导致在一个对象数组的位置很容易,但是如何检查!empty($record[0]->id)
和!empty($record[0][0]->id)
却没有错误。
有趣的是,以下查询返回对象数组或具有空[null]
的数组。
$records = DB::select('SELECT fertilapp.* ' .
' FROM fertilapp ' .
' LEFT JOIN fertilappuser ON fertilappuser.id = fertilapp.fertilappuser_id ' .
' WHERE fertilappuser.id = ? ' .
' GROUP BY fertilapp.id ' .
' ORDER BY fertilapp.id ASC ',[$request->get( 'id' )]);
可以使用以上方法进行测试。仍然想知道为什么Eloquent方法返回上面的结果。
运行查询后,我检查结果是否可用并遍历它们。
if (isset($records) && !empty($records) ) {
foreach ($records as $key => $value) {...}
}
解决方法
首先
isset($record)
将始终返回true,因为您自己设置了$record
变量。
第二,
您应该使用!empty($record)
或!$record->isEmpty()
而不是$record->isNotEmpty()
。
第三,
您遇到的null
值可能是left join
的结果。如果要避免使用(inner) join
值,请使用null
。
您在此处使用左联接- fertilappusers 左联接fertilapp 即使他们在fertilapp表中没有记录,它也会返回所有用户记录。
您提供的查询是不同的。第一个就像我上面说的。 第二个是fertilapp左联接fertilappusers,即使没有用户,它也会为您提供fertilapp的所有记录。
请检查此链接,您将在这里熟悉mysql连接的工作方式 What's the difference between INNER JOIN,LEFT JOIN,RIGHT JOIN and FULL JOIN?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。