Mysql Laravel查询生成器嵌套联接和别名

Mysql Laravel查询生成器嵌套联接和别名,mysql,laravel,query-builder,Mysql,Laravel,Query Builder,如何使用Laravel的查询生成器创建此查询: SELECT `content`.`tagable_id`,`taged`.`tag_id` FROM `taged` RIGHT JOIN (SELECT `taged`.`tagable_id`,`taged`.`tag_id` FROM `taged` WHERE `taged`.`mask_flag`='0' AND `taged`.`tagable_type`='App\\\Post'

如何使用Laravel的查询生成器创建此查询:

SELECT `content`.`tagable_id`,`taged`.`tag_id`
FROM `taged`
RIGHT JOIN
    (SELECT `taged`.`tagable_id`,`taged`.`tag_id`
    FROM `taged`
    WHERE `taged`.`mask_flag`='0'
        AND `taged`.`tagable_type`='App\\\Post'
        AND `taged`.`user_id`='1') AS `content`
ON `taged`.`mask_flag`='1'
    AND `content`.`tagable_id`=`taged`.`tagable_id`
    AND `taged`.`tagable_type`='App\\\Post'
    AND `taged`.`user_id`='1'

内部
SELECT taged.tagable\u id…
周围的括号是我的主要问题所在。

以下是您的Laravel查询:

$result = DB::table('taged')
             ->select('content.tagable_id', 'taged.tag_id')
             ->rightJoin(DB::raw('SELECT tagable_id, tag_id FROM taged AS content'), function($join)
         {
             $join->on('taged.mask_flag', '=', 1);
             $join->on('content.tagable_id', '=', 'taged.tagable_id');
             $join->on('taged.tagable_type', '=', 'App\\\Post');
             $join->on('taged.user_id', '=', 1);
         })
         ->where('content.mask_flag', '=', 0);
         ->where('content.tagable_type', '=', 'App\\\Post');
         ->where('content.user_id', '=', 1);
         ->get();

我一直在尝试,但还没能让它发挥作用。它会产生许多错误。谢谢你,那些错误是什么?尝试将
WHERE
条件移出join函数,如下所述