[英]CakePHP 3.x - toArray() on null
在控制器方法中,我试图获取修订注释历史记录表中的最新记录。
所以我有这个:
$RevisionSubstances = TableRegistry::get('RevisionSubstances');
$revision_history = $RevisionSubstances->find('all')->where(['substance_id' => $substance_id])->orderDesc('date')->first()-toArray();
debug($revision_history);
只要'revision_substances'
表中有符合条件的记录,它就可以正常工作。
我注意到,对于没有找到匹配数据的查询(即数据库中没有与查询匹配的记录),它给我一个错误:
在数组上调用成员函数
toArray()
我的解决方法是从查询中删除toArray()
。 然后,我使用if
语句在调用toArray()
之前检查$revision_history
是否不为null
,如下所示:
$revision_history = $RevisionSubstances->find('all')->where(['substance_id' => $substance_id])->orderDesc('date')->first();
if ($revision_history) {
$revision_history = $revision_history->toArray();
}
debug($revision_history);
这有效并且给了我想要的结果debug($revision_history);
的输出debug($revision_history);
为null
,并且应用程序不会产生致命错误。
这是处理这种情况的正确/最佳方法,还是有更优雅的方法? 我觉得不必使用if
语句是不必要的吗?
调用->first()
将仅返回一个对象,如果没有,则返回null。 ->toArray()
会将对象转换为数组,如果这是您想要的,但是您不能在空值上调用函数,因此会出错。
如果要直接从->first()
调用返回数组,可以在查询的前面使用->hydrate(false)
,然后跳过->array()
调用。
您也可以使用->firstOrFail()
并在没有匹配记录时捕获产生的异常。 这大约相当于您的if
方法,但是在某些情况下可能会有好处。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.