yii2 Как сформировать запрос?

234
04 июня 2018, 00:30

Есть рабочий запрос:

SELECT DISTINCT(`id_timestamp`) as `ids`, (SELECT COUNT(*) FROM `test_user_aswer` WHERE `id_timestamp` = `ids`) as `c` FROM `test_user_aswer` WHERE `id_user`='2'

Как с помощью ActiveRecord его записать?

Пробовал так:

$query = UserAnswer::find(); 
$times = $query->select([
    'ids' => 'id_timestamp',
    'c' => $query->select(['COUNT(`id_timestamp`)'])->where(['id_timestamp' => 'ids'])->createCommand()->getRawSql()
    ])
  ->distinct()
  ->where(['id_user' => $id_user])
  ->asArray()
  ->all();

Но выдает ошибку, что не правильный запрос

Answer 1

Доброй ночи.

Запросы можно объединить.

$query1 = (new \yii\db\Query())
  ->select("id, category_id AS type, name")
  ->from('post')
  ->limit(10);
$query2 = (new \yii\db\Query())
  ->select('id, type, name')
  ->from('user')
  ->limit(10);
$query1->union($query2);

Можно объединить через join

$query->leftJoin('post', 'post.user_id = user.id');

В ActiveRecord тоже всё это можно использовать.

$customers = Customer::find()
  ->select('customer.*')
  ->leftJoin('order', '`order`.`customer_id` = `customer`.`id`')
  ->where(['order.status' => Order::STATUS_ACTIVE])
  ->with('orders')
  ->all();

Подробности тут и тут.

Answer 2

В общем решил данный вопрос, проблема была в том, что YII не брал в дужки запрос в SELECT. Сделал так:

    $query = UserAnswer::find();
    $times = $query->select([
                'ids' => 'id_timestamp',
                'c' => '('.$query->select(['COUNT(`id_timestamp`)'])
                            ->where('`id_timestamp` = `ids`')
                            ->createCommand()
                            ->getRawSql().')'
            ])
        ->distinct()
        ->where(['id_user' => $id_user])
        ->asArray()
        ->all();

Всем спасибо!

READ ALSO
Удаление ?page= из адресной строки

Удаление ?page= из адресной строки

Есть ссылка вида: хост/?page=mainЧто прописать в

208
Слишком долгая инициализация multi curl

Слишком долгая инициализация multi curl

На вход обработки multi curl подаю массив из ссылок, файлы по которым весят в среднем 300-500кбНо проблема в том что,например, при сотне ссылок курл...

218
Скачивание файла средством apigility + dompdf

Скачивание файла средством apigility + dompdf

Всем привет! Пишу api, задача выдать файл pdf на скачиваниеФайл скачивается, но в конец дописывается текст: © Copyright 2013 - 2018 by Zend Technologies Ltd

199
помощь по сайту

помощь по сайту

Номер и имя человека мне приходит в datatxt, но прикрепленные файлы не приходят, опишите пожалуйста подробно что сделать что бы они тоже приходили

201