CakePHP 3 Contains将提供一个多维数组

时间:2016-11-23 11:46:19

标签: cakephp cakephp-3.x

我创建了一个查询功能来选择一些时段,每个时段选择最大日期和天数。

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

1 个答案:

答案 0 :(得分:1)

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

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