I can't find a way to do a left join to count elements from pivot table using Eloquent and Fluent. My SQL query is this :
SELECT settings.* FROM settings LEFT JOIN ( SELECT COUNT(*) AS counter FROM favorites GROUP BY setting_id ) favorites ON (favorites.setting_id = settings.id) WHERE settings.state = 1 ORDER BY favorites.counter DESC
So I want to use Eloquent to get my main part, like so :
$settings = Setting::where('state', '=', 1)->get();
And left join to that my count. In this example I have one count but in real I have 3 counts, so if I don't do subselect I can have Cartesian product issue.
Thanks for your help !
I have tried similar things but I never seem to be able do it without using
DB:raw, if you find a way I would love to know.
Setting::select("settings.*") ->leftJoin(DB::raw("(SELECT COUNT(*) AS counter FROM favorites GROUP BY setting_id) favorites", "favorites.setting_id", "=", "settings.id") ->where("settings.state", "=", 1) ->orderBy("favorites.counter", "DESC");
Hi ! Are you sure your solution works because you don't return 'favorites.setting_id' from your leftJoin raw select so Eloquent can't perform the ON join clause.
Maybe bellow link example can help you : http://itsolutionstuff.com/post/laravel-5-join-with-subquery-in-query-builder-exampleexample.html
Sign in to participate in this thread!