空值上的cakephp3.x-toArray()
在控制器方法中,我试图获取修订注释历史记录表中的最新记录 所以我有这个:空值上的cakephp3.x-toArray(),php,cakephp,collections,cakephp-3.0,query-builder,Php,Cakephp,Collections,Cakephp 3.0,Query Builder,在控制器方法中,我试图获取修订注释历史记录表中的最新记录 所以我有这个: $RevisionSubstances = TableRegistry::get('RevisionSubstances'); $revision_history = $RevisionSubstances->find('all')->where(['substance_id' => $substance_id])->orderDesc('date')->first()-toArray();
$RevisionSubstances = TableRegistry::get('RevisionSubstances');
$revision_history = $RevisionSubstances->find('all')->where(['substance_id' => $substance_id])->orderDesc('date')->first()-toArray();
debug($revision_history);
只要'revision\u substances'
表中有符合标准的记录,这种方法就行
我注意到,对于没有找到匹配数据的查询(即数据库中没有与查询匹配的记录),它会给我一个错误:
调用数组上的成员函数toArray()
我的解决方法是从查询中删除toArray()
。然后,在调用toArray()
之前,我使用if
语句检查$revision\u 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\u history)的输出代码>为null
,并且应用程序不会生成致命错误
这是处理这种情况的正确/最佳方法还是有更优雅的方法?如果
语句在某种程度上是不必要的,我觉得必须有一个。对->first()
的调用将只返回一个对象,如果没有,则返回null->toArray()
将对象转换为数组,如果这是您想要的,但不能对空值调用函数,因此会出现错误
如果希望直接从->first()
调用返回数组,可以在查询的前面使用->(false)
,然后跳过->array()
调用
您还可以使用->firstOrFail()
并在没有匹配记录时捕获结果异常;这大致相当于if
方法,但在某些情况下可能会有好处。调用->first()
将只返回一个对象,如果没有,则返回null->toArray()
将对象转换为数组,如果这是您想要的,但不能对空值调用函数,因此会出现错误
如果希望直接从->first()
调用返回数组,可以在查询的前面使用->(false)
,然后跳过->array()
调用
您还可以使用->firstOrFail()
并在没有匹配记录时捕获结果异常;这大致相当于您的if
方法,但在某些情况下可能有好处