【发布时间】:2020-12-27 06:07:02
【问题描述】:
我正在使用 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) {...}
}
【问题讨论】:
-
你在查询后用
$record做什么?您是否将其包装在Resource类中?在任何情况下,$record都应该是Eloquent Collection。如果想知道是否为空,请使用收集方法:$record->isEmpty()或$record->isNotEmpty() -
资源类是什么意思?
-
使用
->isEmpty()/->isNotEmpty()是否返回预期值?你是如何“测试”它的?你用什么来转储数据并在数组中获取数组? -
我的意思是Eloquent Resource。如果你不使用它并不重要。
-
我正在使用一个名为
FertilAppUser的模型。
标签: php laravel object eloquent