使用laravel通过数据透视表的会议ID获取用户

2vuwiymt  于 2022-12-30  发布在  其他
关注(0)|答案(1)|浏览(148)

我已经搜索了相关信息,但尝试后,我一直无法得到结果。
我有两个多对多的相关表,我需要列出注册同一个会议的用户(meeting_id)。
以下是用户模型:

public function meetings()
    {
        return $this->belongsToMany(Meeting::class);
    }

这是会议模式:

{
        return $this->belongsToMany(User::class);
    }

我有一个数据透视表:会议用户,例如:
| 识别号|会议标识|用户ID|
| - ------| - ------| - ------|
| 1个|1个|1个|
| 第二章|1个|第二章|
| 三个|第二章|三个|
| 四个|1个|四个|
| 五个|第二章|四个|
我需要一份名单:user_id 1、2和4,因为它们位于meeting_id = 1上。
我尝试了不同的方法,但无法获得用户列表。
这是我的控制器:

public function getUsersByMeeting(User $user, Meeting $meeting)
    {
        // $users = Meeting::find($meeting->id)->users->get();

        $users = $user->meetings()->where('meeting_id', $meeting->id)->get();

        return response()->json($users, 200);
    }

我不知道该方法是否需要"User $user"参数(Meeting $meeting yes,以获取$meeting-〉id)。
谢谢!

hwazgwia

hwazgwia1#

您的方法中已经有Meeting $meeting可用。从该变量中,您可以使用->users直接访问关系,或者如果需要其他筛选,可以使用->users()访问查询生成器。
如果您不需要任何额外的筛选,您可以直接执行

public function getUsersByMeeting(User $user, Meeting $meeting)
{
    return response()->json($meeting->users, 200);
}

请注意,这将包括有关透视表的信息。
以下是您可以选择的一些选项。

$users = $meeting->users;
$users = $meeting->users()->get();
$users = User::whereHas('meetings', fn ($q) => $q->where('meetings.id', $meeting->id))->get();

相关问题