CakePHP 3 contains даст многомерный массив

Я создал функцию запроса, чтобы выбрать несколько периодов и для каждого периода максимальную дату и количество дней.

$periods = $this->Periods->find('all')->contain([
    'Days' => function($q) {
        return $q->select([
            'Days.period_id',
            'max_date' => $q->func()->max('Days.date'),
            'count_days' => $q->func()->count('Days.period_id')
        ])->group(['Days.period_id']);
    }
]);

Когда я отлаживаю Days, это будет так:

 [
    (int) 0 => object(Cake\ORM\Entity) {
        'period_id' => (int) 1,
        'max_date' => '2016-11-21',
        'count_days' => (int) 2,
        '[new]' => false,
        '[accessible]' => [
            '*' => true
        ],
        '[dirty]' => [],
        '[original]' => [],
        '[virtual]' => [],
        '[errors]' => [],
        '[invalid]' => [],
        '[repository]' => 'Periods.Days'
    }
    ]

Теперь моя проблема в том, что когда я буду использовать Days, я всегда должен использовать число, подобное $period['days'][0]['max_date'], потому что это многомерный массив. Как я могу сделать так, чтобы я мог использовать $period['days'][max_date].


person CodeWhisperer    schedule 23.11.2016    source источник


Ответы (1)


Ваши записи приходят в правильном формате, так как вы извлекаете все записи. Вам не нужно несколько записей в этом массиве? Если это так, вы можете получить только одну строку. В противном случае вы можете использовать цикл foreach:

foreach($periods as $p) {
   echo $p->max_date;
   echo $p->count_days;
}
person Manohar Khadka    schedule 24.11.2016