Синтаксис TableAlias__ColumnAlias в виртуальных полях не анализируется, как описано
Документы утверждают, что мы можем назвать вычисляемые поля, используя синтаксис Timelog__TotalHours
и PHP проанализирует это как:
[0] => Array
(
[ProductsItems] => Array
(
[Total] => 50
)
)
В моей установке CakePHP/2.9.4 я пробую это в нескольких местах, таких как нумерация страниц, но я получаю имя столбца, обработанное как любая другая строка:
[0] => Array
(
[ProductsItems__Total] => 50
)
Мой тестовый код в контроллере:
$this->Paginator = $this->Components->load(
'Paginator',
array(
'fields' => array(
"CONCAT_WS(' ', Usuario.nombre, Usuario.apellidos) AS Usuario__Empleado",
),
'contain' => array(
'Usuario',
),
'limit' => 2,
)
);
debug($this->Paginator->paginate());
... и печатает:
array(
(int) 0 => array(
(int) 0 => array(
'Usuario__Empleado' => 'Juan García'
),
'Usuario' => array(
'id' => '56'
)
),
(int) 1 => array(
(int) 0 => array(
'Usuario__Empleado' => 'María López'
),
'Usuario' => array(
'id' => '385'
)
)
)
Нужно ли явно включить эту функцию где-нибудь?
1 ответ
Решение
Сначала вы должны определить виртуальное поле перед вашим запросом (может быть модель или контроллер).
$this->CurrentModel->Usuario->virtualFields['Empleado'] = 0;
$this->Paginator = $this->Components->load(
'Paginator',
array(
'fields' => array(
"CONCAT_WS(' ', Usuario.nombre, Usuario.apellidos) AS Usuario__Empleado",
),
'contain' => array(
'Usuario',
),
'limit' => 2,
)
);
debug($this->Paginator->paginate());
Он должен работать.