1 回答

TA貢獻1846條經驗 獲得超7個贊
這實際上取決于您需要如何準確地修改結果,“將單個 JSON 列轉換為多個列”相當模糊,并且可以用各種不同的方式解釋。
在實體中轉換數據是一種選擇,但請注意實體應該盡可能愚蠢,理想情況下您應該盡可能將它們保留為普通數據傳輸對象。如果有其他方法解決問題,通常應該避免在實體本身中進行更大的“變革”操作。
修改結果的集中方法是查詢對象的結果格式化程序,它們可以輕松附加到Model.beforeFind事件/處理程序中,以便將它們應用于特定表的所有查詢,甚至應用于所有表。afterFind這幾乎就是您在 CakePHP 2.x 中要做的事情。
結果格式化程序還有一個優點,即當您使用禁用水合作用的查詢(即返回數組而不是實體的查詢)時,它們將為您提供正確的數據。
一個快速而骯臟的例子:
public function beforeFind(\Cake\Event\EventInterface $event, \Cake\ORM\Query $query): \Cake\ORM\Query
{
return $query->formatResults(function (\Cake\Collection\CollectionInterface $results) {
return $results->map(function ($row) {
// $row is the entity (or array when hydration is disabled) in the result set
$row['new_field'] = 1234;
return $row;
});
});
}
- 1 回答
- 0 關注
- 104 瀏覽
添加回答
舉報