在laravel中两次连接表的语法

时间:2016-07-08 07:38:46

标签: php mysql

我正在尝试加入以下3个表格。问题在于我想使用'AND'运算符将posts.id加入到shares.post_id的部分,这是不正确的。这样做的正确语法是什么?

$sharedPosts = DB::table('shares')
            ->join('users', 'users.id', '=', 'shares.user_id')
            ->join('posts', 'posts.user_id', '=', 'users.id' , 'AND' , 'posts.id', '=', 'shares.post_id')
            ->where('shares.user_id', '=', $myFriends)

         ->get();

1 个答案:

答案 0 :(得分:1)

尝试别名:

$sharedPosts = DB::table('shares')
            ->join('users', 'users.id', '=', 'shares.user_id')
            ->join('posts as p1', 'p1.user_id', '=', 'users.id' , 'AND' , 'p1.id', '=', 'shares.post_id')
            ->join('posts as p2', 'p2.id', '=', 'shares.post_id')
            ->where('shares.user_id', '=', $myFriends)
         ->get();

如果没有别名,则无法连接两次表。

虽然如果你的加入中有2个条款,我认为你应该像documentation中那样:

$sharedPosts = DB::table('shares')
    ->join('users', 'users.id', '=', 'shares.user_id')
    ->join('posts as p1', , function($join){
        $join->on('p1.user_id', '=', 'users.id')
             ->on('p1.id', '=', 'shares.post_id')
    })
    ->join('posts as p2', 'p2.id', '=', 'shares.post_id')
    ->where('shares.user_id', '=', $myFriends)
->get();

修改(加入一个帖子):

$sharedPosts = DB::table('shares')
    ->join('users', 'users.id', '=', 'shares.user_id')
    ->join('posts', , function($join){
        $join->on('posts.user_id', '=', 'users.id')
             ->on('posts.id', '=', 'shares.post_id')
    })
    ->where('shares.user_id', '=', $myFriends)
->get();