Laravel 2 table 加入所有来自左边的 table 与右边的成员合并 table 具有给定的 FK 值

Laravel 2 table join with all from left table merged with members of the right table with a given FK value

我在 Laravel 中有两个 table,我想将它们合并在一起,但是,我想 return 第一个 [=27= 的每个值](没有重复项)以及第二个 table 中 FK 值为 2 的值。如果没有 FK 为 2 的条目,则它加入空值。

为了让我的问题更清楚一点,假设我们有以下 tables:

TV Shows Table
ID  |  Show
1   |  First Show
2   |  Second Show
3   |  Third Show

Favorites Table
Show_ID  |  Member_ID
1        |  1 
3        |  1 
1        |  2 
2        |  2

当我加入成员 ID 为 2 的 table 时(忽略加入的 'Show_ID' 列),我希望将它们合并到如下所示的结果集中:

Merged Table
ID  |  Show         |  Member_ID
1   |  First Show   |  2
2   |  Second Show  |  2
3   |  Third Show   |  null

谢谢。

我不是 100% 理解,所以希望这就是您要找的。

我重命名了一些列名称以使事情更清楚。

DB::table('shows')
    ->select(
        'shows.id as show_id',
        'shows.name as show_name',
        'member.id as member_id'
    )
    ->leftJoin('favourites', 'shows.id', '=', 'favourites.show_id')
    ->get();

左联接将允许在 member_id 中存在 null(如果联接中不存在)。

您可以添加此限制为两个成员 ID:

DB::table('shows')
    ->select(
        'shows.id as show_id',
        'shows.name as show_name',
        'member.id as member_id'
    )
    ->leftJoin('favourites', 'shows.id', '=', 'favourites.show_id')
    ->where('member.id', 2)
    ->get();

我自己解决了。我需要像这样进行功能连接:

DB::table('shows')
    ->leftJoin('favorites', function($q) use $memberID)
    {
        $q->on('shows.ID', '=', 'favorites.show_ID')
            ->where('favorites.member_ID', '=', $memberID);
    })->get();