簡體   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