Синтаксис 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());

Он должен работать.

Другие вопросы по тегам