2014-10-10 2 views
0

У меня есть таблицы базы данных выглядит следующим образом:Yii Framework 2.0

id item date 
1 itemA 2014-01-01 
2 itemB 2014-01-01 
3 itemC 2014-02-02 
4 itemD 2014-02-02 

Я хотел бы получить эти данные и получить результат, как показано ниже.

2014-01-01 
    itemA 
    itemB 
2014-02-02 
    itemC 
    itemD 

В моем классе модели используется активная запись Yii 2.0. Я, хотя об использовании groupBy ('date'), как указано ниже.

$model = MyModelClass::find()->groupBy('date')->all(); 

С вышеуказанным запросом я получаю только одну строку для каждой даты. Есть ли какое-либо решение для достижения моей цели выше в Yii Framework 2.0?

+0

им не уверены, что вы пытаетесь получить, не могут вам только через цикл дату и эхо при изменении даты ? ... или использовать функцию «orderBy» – Flame

+1

, это идея «groupBy», она объединяет результаты с тем же полем, в котором вы «группируете». Я бы сказал, что вам лучше сортировать результаты по дате, а затем проверять даты на каждом из них, прежде чем отображать результаты. – lascort

+0

Давайте забудем о «группе», потому что, хотя это было решение, но это не так. Как я могу подойти к своей цели с помощью Active Record в Yii framework 2.0? –

ответ

0

Я бы так что-то вроде этого:

$models = MyModelClass::find()->all(); 
foreach($models as $model) { 
    $arr_models[$model->date] = $model; 
    //or $arr_models[$model->date][] = $model->name; to get the array exactly how you want it 
} 

Если у вас есть много записей, которые вам нужно пройти, вы всегда можете использовать MyModelClass::find()->asArray()->all();

0

Привет вы получите только одну строку для каждой даты, потому что groupBy ('date') используется, когда вы хотите найти среднее значение, или сумму или количество числовых значений в столбце.

решением является

use yii\helpers\ArrayHelper; 

$models = MyModelClass::find()->asArray()->all(); 

$array = ArrayHelper::map($models, 'id','item','date'); 

вы можете Переберите массив $ принять результаты

Смежные вопросы