Виртуальные поля модели Cakephp не работают

У меня уже есть несколько виртуальных полей, работающих над моим приложением, но это ломает мне голову.

Итак, у меня есть объект SubactivitySlots со следующим кодом:

protected $_virtual = [
    'slots_text',
];

а также

protected function _getSlotsText(){
    return "test";
}

Когда я запускаю запрос:

debug($this->SubactivitySlots->find('all')->first());

Он возвращает мне следующую структуру (пробовал как с first, так и с toArray()

object(App\Model\Entity\SubactivitySlot) {

'id' => (int) 1,
'name' => 'MAIN',
'description' => '-',
'activity_id' => (int) 1,
'subactivity_min' => (int) 1,
'subactivity_max' => (int) 1,
'position' => (int) 1,
'institution_id' => (int) 1,
'deleted' => (int) 0,
'[new]' => false,
'[accessible]' => [
    '*' => true
],
'[dirty]' => [],
'[original]' => [],
'[virtual]' => [
    (int) 0 => 'slots_text'
],
'[errors]' => [],
'[invalid]' => [],
'[repository]' => 'SubactivitySlots'

}

Любая подсказка о том, что может быть не так? Я потратил много времени, пытаясь обнаружить и не могу узнать. Самое странное, что я использую виртуальные поля на других объектах, и это работает.

Спасибо


person Cafn    schedule 14.03.2018    source источник


Ответы (1)


Если я не ошибаюсь, торт не отлаживает виртуальные поля до 3.5.13.

В торте 3.4 свойство $_virtual используется при «преобразовании объектов в массивы или JSON» (из здесь), но не в режиме отладки.

Поэтому, даже если вы не видите их при отладке, вы должны увидеть их при преобразовании объекта в JSON.

В любом случае это должно было измениться в версии 3.5.13 (см. блог здесь< /strong>), поэтому, если вы сможете обновить, проблема будет решена.

person arilia    schedule 15.03.2018