0

both, Project as well as Member classes have belongToMany relations and my pivot model MemberProject has table member_project with additional role_id field forming project_id,member_id,role_id triplet also has belongsTo relation to Role class

I am trying to order by a field in my role relation so came up with the following

$project->load(['members' => function ($qry) {
    $qry
    ->selectRaw('roles.order as `order`, roles.name as `title`, members.*')
    ->join('roles', 'roles.id', '=', 'member_project.role_id')
    ->orderBy('roles.order', 'desc')->get();
}]);

which does the job but this sql is executed twice for some reason.

SELECT `roles`.*, `members`.*,
  `member_project`.`project_id` AS `pivot_project_id`,
  `member_project`.`member_id` AS `pivot_member_id`,
  `member_project`.`role_id` AS `pivot_role_id`
FROM `members`
  INNER JOIN `member_project` ON `members`.`id` = `member_project`.`member_id`
  INNER JOIN `roles` ON `roles`.`id` = `member_project`.`role_id`
WHERE `member_project`.`project_id` in (2)
ORDER BY `roles`.`order`;

as you noticed I am adding additional join using the method from Laravel documentation on Constraining Eager loads. of course when there is no join, only one query is executed. here is exact the same query executed twice. why?

if you know any other way to sort many-to-many relation based on pivot model relation, please let me know.

dascorp
  • 183
  • 7
  • 15
  • 1
    Please remove this `->get();` from load method – Aro Jul 24 '22 at 16:43
  • Does this answer your question? [How to order by column in nested 2 level relationship in Laravel?](https://stackoverflow.com/questions/55566752/how-to-order-by-column-in-nested-2-level-relationship-in-laravel) – rifqy abdl Jul 25 '22 at 11:14

0 Answers0