空值上的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
方法,但在某些情况下可能有好处