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