badbizarre
@badbizarre

YII2 как составить запрос на Active Record?

Не пойму как составить такой запрос на YII2
SELECT 
	`np_recepty`.*, 
	(SELECT count(*) 
	 FROM `np_recepty_ingredients` s1 
	 WHERE s1.recept_id = s.recept_id and `ingredient_id` IN (144,274,322)) as `cnt`
FROM `np_recepty_ingredients` s
LEFT JOIN `np_recepty` ON `np_recepty`.`id` = s.`recept_id` 
GROUP BY `np_recepty`.`id`
HAVING `cnt` > 0
ORDER BY `cnt` DESC
  • Вопрос задан
  • 562 просмотра
Пригласить эксперта
Ответы на вопрос 2
LittleFatNinja
@LittleFatNinja
горе девелопер, любитель лютой садомии
в чем проблема?
Ответ написан
badbizarre
@badbizarre Автор вопроса
$subQuery = (new \yii\db\Query())
		->select('COUNT(*)')
		->where('s1.`recept_id` = `np_recepty_ingredients`.`recept_id`')
		->from('np_recepty_ingredients s1');
		
$query = (new \yii\db\Query())
		->select(['np_recepty.*', 'cnt' => $subQuery])
		->from('np_recepty_ingredients')
		->join('LEFT JOIN','`np_recepty` ON `np_recepty`.`id` = `np_recepty_ingredients`.`recept_id`')
		->groupBy('`np_recepty`.`id`')
		->having('cnt > 0')
		->orderBy('cnt DESC');


Выдает запрос один в один как мне надо. Но почему то если делаю в конце ->all() результат будет массив, а мне нужен объект, подскажите что сделать?
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
23 нояб. 2024, в 01:31
1500 руб./за проект
23 нояб. 2024, в 00:16
2000 руб./за проект
22 нояб. 2024, в 23:55
3000 руб./за проект