CakePHP 3 Contains 将给出一个多维数组

CakePHP 3 Contains will give a multidimensional array

我创建了一个查询函数,用于 select 一些时间段以及每个时间段的最大日期和天数。

$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'
    }
    ]

现在我的问题是,当我使用天数时,我总是必须使用像 $period['days'][0]['max_date'] 这样的数字,因为它是一个多维数组。我怎样才能使我可以使用 $period['days'][max_date].

您正在检索所有记录,因此您的记录格式正确。 您不需要该数组中的多条记录吗?如果是这样,您只能检索单行。否则你可以使用 foreach 循环:

foreach($periods as $p) {
   echo $p->max_date;
   echo $p->count_days;
}