leshikgo
@leshikgo

Как переделать sql под Query Builder в Laravel?

Добрый вечер. Помогите адаптировать под ларавел(Query Builder) такой запрос:
$similar_flavors = DB::select('SELECT d.flavor_id, COUNT(d.recipe_id) AS count FROM flavor_recipe
            INNER JOIN flavor_recipe d ON d.recipe_id = flavor_recipe.recipe_id
            WHERE flavor_recipe.flavor_id = 1 AND d.flavor_id <> 1
            GROUP BY d.flavor_id
            ORDER BY count');

//структура таблиц
recipes(посты)
id
...
flavors(элементы)
id
...
пост_элемент(связующая)
id
recipe_id
flavor_id


"Допустим, есть пост с этим постом связаны элементы. Мы можем получить все посты по элементу и в свою очередь элементы по посту.(Связь многие ко многим.).
Собственно вопрос, как можно сделать выборку и сортировку.. Допустим, переходим к элемент1 и выводим все элементы с которыми он наиболее часто используется в постах."
  • Вопрос задан
  • 150 просмотров
Пригласить эксперта
Ответы на вопрос 1
wielski
@wielski
✔ Совет: Вам помогли? Отметьте ответы решением.
Я помню уже описывал вам логику подобной выборки. Так и быть, напишу готовый код, иначе никак :)

Receip
public function flavors(){
   return $this->belongsToMany(\App\Flavor::class);
}


Flavor
public function flavors(){
   return $this->belongsToMany(\App\Receip::class);
}

public function getMostPostableAttribute(){
   return $this->flavors()->select(\DB::raw('`flavor_receipe.flavor_id`, count(`flavor_recipe.recipe_id`) as count'))->groupBy('flavor_receipe.flavor_id')->orderBy('count')->get();
}


Вывод:
$flavor = Flavor::find(1);
dd($flavor->mostPostable);
Ответ написан
Ваш ответ на вопрос

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

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