Как показать вложенное значение ассоциации cakephp 3

Я хочу запустить этот код, где он имеет вложенные данные ассоциации:

'VhpProducts.VhpHasilPencapaian',
'Departments.VhpHasilPencapaian',
'Groups.VhpHasilPencapaian' and to sum 'VhpHasilPencapaian.quantity'

но все, что я получил, было

Ошибка: SQLSTATE[42S22]: столбец не найден: 1054 Неизвестный столбец "VhpHasilPencapaian.amount" в "списке полей"

$vhpCriteria = $this->VhpCriterias->find('all', [
    'contain' => [
        'VhpProducts.VhpHasilPencapaian',
        'Departments.VhpHasilPencapaian',
        'Groups.VhpHasilPencapaian'
    ],
    'field' => ['VhpProducts.name']
]);
$vhpCriteria->select([
    'product' => 'VhpProducts.name',
    'amountTotal' => $vhpHasilPencapaian->func()->sum('VhpHasilPencapaian.amount'),
    'qty' => $vhpHasilPencapaian->func()->sum('VhpHasilPencapaian.quantity'),
]);

2 ответа

"Вложенные" ассоциации должны быть записаны так:

    $users = $this
        ->Users
        ->find('all')
        ->contain([
            'Roles' => [
                'Rights'
            ],
            'Posts' => [
                'Comments' => [
                    'Replies' => function($query) {
                        return $query
                            ->where(['public' => 1]);
                    }
                ]
            ]
        ])
    ->toArray();

Вам нужно выбрать все данные, которые вы собираетесь использовать. Ваше поле должно быть полями и включать ВСЕ поля, которые вы хотите вернуть. В качестве альтернативы вы можете полностью исключить это, чтобы вернуть все. Если у вас нет поля, указанного в опции полей, вы не получите его и не сможете его использовать.

$vhpCriteria = $this->VhpCriterias->find('all', [
    'contain' => [
        'VhpProducts.VhpHasilPencapaian',
        'Departments.VhpHasilPencapaian',
        'Groups.VhpHasilPencapaian'
    ],
    'fields' => ['VhpProducts.name', 'ALL OTHER FIELDS']
]);

$vhpCriteria->select([
    'product' => 'VhpProducts.name',
    'amountTotal' => $vhpHasilPencapaian->func()->sum('VhpHasilPencapaian.amount'),
    'qty' => $vhpHasilPencapaian->func()->sum('VhpHasilPencapaian.quantity'),
]);
Другие вопросы по тегам