У нас есть таблица пар имя-значение с дополнительными элементами, которые можно связать со свойством site_id, netpark_location_id и т. Д.
Когда cakephp возвращает ассоциацию hasMany для таблицы PropertyOption, она в обычном формате для ассоциации hasMany:
[PropertyOption] => Array
(
[0] => Array
(
[id] => 1
[property_id] => 1
[name] => prs_company_id
[value] => 7
[type] => text
[created] => 2018-10-02 16:05:38
[modified] => 2018-10-02 16:05:38
)
[1] => Array
(
[id] => 1
[property_id] => 1
[name] => prs_channel_id
[value] => 880
[type] => text
[created] => 2018-10-02 16:05:38
[modified] => 2018-10-02 16:05:38
)
Есть ли способ или способ AfterFind для массирования данных в
[PropertyOption] => Array
(
[prs_channel_id] => 880
[prs_company_id] => 7
)
В настоящее время я использую функцию в AppModel, которая позволяет передавать ему набор результатов, но это дополнительный вызов
public function nameValPair($alias,$results){
$result = [];
if(is_array($results[$alias]) && count($results[$alias]) > 0){
foreach ($results[$alias] AS $r){
$result[$r['name']] = $r['value'];
}
}
return $result;
}
Затем в контроллере мы должны передать результаты в
$propoption = $this->Property->nameValPair('PropertyOption',$property);
$property['PropertyOption'] = $propoption;