2016-09-14 2 views
0

Выполняя мои первые шаги в красноречивом, я пытаюсь получить запрос, который извлекает некоторые данные и одновременно подсчитывает некоторые условия.Eloquent multiple select в том же запросе

Этого сырье SQL предложение работает, как ожидалось

SELECT * 
FROM photos, 
(SELECT COUNT(*) FROM photos where type = 1 and published =1 group by type) as qA, 
(SELECT COUNT(*) FROM photos where type = 2 and published =1 group by type) as qP 
where product_id = 7 
and published = 1 

Но использование Фотомодель я не могу получить тот же результат

Photo::select(*, 
Photo::raw('count(*) where type = 1 and published =1 group by type as qA), 
Photo::raw('count(*) where type = 2 and published =1 group by type as qP)) 
->where ('product_id',7) 
->where('published', 1) 
->get() 

Зачистки из «сырых» предложений, этот запрос работает, но я необходимо учитывать эти «типовые» вхождения.

Заранее благодарен за руководство.

+0

Try запись -> toSql() вместо -> получить(), и вы будете печатать то, что SQL-эквивалент. Затем вы можете вносить изменения в все, что вам нужно (мое разрешение всякий раз, когда мне нужно перерабатывать запросы) – abr

ответ

0

Вам действительно нужно получить все в одном запросе? Имеет ли смысл ваше приложение? Я имею в виду, я думаю, что эти типы рассчитывают не информацию о записи (s?), Которую вы извлекаете (product_id = 7), а скорее общая информация о состоянии таблицы в целом.

Если это имеет смысл, вы можете попробовать

$photo = Photo::where ('product_id',7) 
    ->where('published', 1) 
    ->get(); 

$types_count = Photo::where('published', 1) 
    ->selectRaw('type, COUNT(*) AS count') 
    ->groupBy('type') 
    ->get() 
    ->keyBy('type'); 

$qA = $types_count[1]->count; 
$qP = $types_count[2]->count; 
Смежные вопросы