繁体   English   中英

CakePHP 3.x-null上的toArray()

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM