CakePHP 3.x-null上的toArray()

时间:2018-10-16 14:22:37

标签: 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();
debug($revision_history);

这很好-只要'revision_substances'表中有符合条件的记录即可。

我注意到,对于没有找到匹配数据的查询(即数据库中没有与查询匹配的记录),这会给我一个错误:

  

在数组上调用成员函数toArray()

我的解决方法是从查询中删除toArray()。然后,我使用if语句在对其调用$revision_history之前检查null是否不是toArray(),如下所示:

$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);的输出为null,应用程序不会产生致命错误。

这是处理这种情况的正确/最佳方法,还是有更优雅的方法?我觉得不必if声明是不必要的吗?

1 个答案:

答案 0 :(得分:2)

wget -q -O- "http://meteocentre.com/montreal/home_e.html" | grep -oP '(?<=Tn= ).*(?=&deg)' | echo $(cat) °C 的调用将仅返回一个对象,如果没有则返回null。 ->first()会将对象转换为数组,如果需要的话,但是您不能在空值上调用函数,因此会出错。

如果您希望直接从->toArray()调用中返回一个数组,则可以在查询的前面使用->first(),然后跳过->hydrate(false)调用。

如果没有匹配的记录,您也可以使用->array()并捕获结果异常;这大约相当于您的->firstOrFail()方法,但是在某些情况下可能会有好处。