我在 PHP 中有一小段代码,它根据值是否包含/包含特定值返回某些键值对:Code Runnable number 1
这实际上取决于您需要如何准确地修改结果,“将单个 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;
});
});
}
达令说
喵喵时光机
杨魅力