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.