亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

CakePHP 4 修改表中的查詢結果

CakePHP 4 修改表中的查詢結果

PHP
慕斯709654 2023-08-19 17:30:03
我正在尋找有關如何在每次調用特定表時修改查詢結果的示例或解釋。我見過的所有例子主要是針對控制器的。我正在尋找類似于舊函數 afterFind() 的東西。我的目標是在我的表文件中放置一個函數,以自動修改站點上全局的結果。[或者:=>如果有人知道我可以自動將單個 json 列轉換為多個列的方法,這可以解決我的問題。]PS:我嘗試過弄亂方案、行為和集合,但沒有用。(除非我錯誤地使用了一個)
查看完整描述

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;

        });

    });

}


查看完整回答
反對 回復 2023-08-19
  • 1 回答
  • 0 關注
  • 104 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號