Как выполнить выборку и считать в одном запросе в Yii - PullRequest
0 голосов
/ 31 августа 2018

Я хочу выполнить этот SQL-запрос в Yii:

select count(id), userID from tableName where type = 'admin' and dateAdded between '2018-07-01' and '2018-08-01' group by userID

Есть ли способ выполнить этот запрос в findAll(), countAll() или другом методе Yii? Я не хочу использовать findAllBySQL().

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

Yii 1.1

$data = MyModel::model()->findAll([
    'select' => [
        'count(id) as count', 
        'userID'
    ],
    'condition' => "type = 'admin' and dateAdded between '2018-07-01' and '2018-08-01'",
    'group' => 'userID',
]);

Вам также необходимо добавить count свойство к MyModel:

class MyModel extends CActiveRecord {

    public $count;

    // ...
}

Затем вы можете сопоставить счетчики с идентификаторами:

$counts = CHtml::listData($data, 'userId', 'count');

Или получить доступ к нему в foreach:

foreach ($data as $model) {
    echo "$model->userID - $model->count\n";
}

Yii 2

$data = Post::find()
    ->select([
        'count(id) as count',
        'userID',
    ])
    ->where("type = 'admin' and dateAdded between '2018-07-01' and '2018-08-01'")
    ->groupBy('userID')
    ->asArray()
    ->all();

Отображение:

$counts = ArrayHelper::map($data, 'userID', 'count');

Foreach:

foreach ($data as $row) {
    echo "{$row['userID']} - {$row['count']}\n";
}
0 голосов
/ 03 сентября 2018

Вы можете использовать следующее решение для выполнения выбора и подсчета в одном операторе:

$model=Model::find()->where([your conditions])->count();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...