@teodor7teodor7

Как правильно оформить подзапрос в YII2?

Немогу понять как правильно оформить подзапрос.
public function actionIndex() {
    
    $query =  new \yii\db\Query();
    $subQuery = new \yii\db\Query();
    
    $comments_count = $subQuery->select('comments.deadline_id ')
      ->where(['comments.deadline_id' =>  'deadline.id'])
      ->from('comments')
      ->count();
    
    $task = $query->select(['deadline.id','deadline.text','deadline.status','deadline.deadline_date','comments_count' => $comments_count])
      ->where(['deadline.status' =>  1])
      ->from('deadline')
      ->all(); 
    
  //  $task = $query->createCommand()->sql;var_dump($task);die();
    
    $taskUncheked = $query->select(['deadline.id','deadline.text','deadline.status','deadline.deadline_date','comments_count' => $comments_count])
      ->where(['deadline.status' =>  '0'])
      ->from('deadline')
      ->orderBy(['deadline.deadline_date' => SORT_ASC])
      ->all();
        
    return    $task + $taskUncheked;
  }

К сожалению comments_count выдает ноль. Хотя в БД просто запрос отрабатывает нормально. Скорее всего deadline.id не виден из подзапроса.
  • Вопрос задан
  • 1797 просмотров
Решения вопроса 1
@teodor7teodor7 Автор вопроса
$task = $query1->select(['deadline.id', 'deadline.text', 'deadline.status', 'deadline.deadline_date', 'COUNT(`comments`.`deadline_id`) AS comments_count'])
                ->from('deadline')
                ->join('LEFT JOIN', 'comments', '`deadline`.`id` = `comments`.`deadline_id`')
                ->where('`deadline`.`status` = 1')
                ->groupBy('deadline.id')
                ->all();
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
qonand
@qonand
Software Engineer
$comments_count = $subQuery->select('comments.deadline_id ')
      ->where(['comments.deadline_id' =>  'deadline.id'])
      ->from('comments')
      ->count();


deadline.id - это название столбца с другой таблицы, если Вы использует в запросе к таблице comments другую таблицу то Вы должны ее связать с помощью JOIN

в данной же реализации Вы говорите базе данных "посчитай количество комментариев по deadline.id" но не говорите ей что такое deadline.id
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы