将mysql查询转换为Eloquent laravel查询

时间:2016-11-27 12:50:40

标签: php mysql laravel

我正在尝试在laravel中进行以下查询:

SELECT a.name AS subname, a.area_id, b.name,  u. id, u.lawyer_id,u.active_search, 

                            FROM subarea a
                            LEFT JOIN user_subarea u ON u.subarea_id = a.id
                            AND u.user_id = ?
                            LEFT JOIN branch b ON a.area_id = b.id

想法是获取子区域并查看用户是否激活了搜索。

user_subarea表可能有一条记录与active_search等于0或1的子区域表的id匹配。如果它不存在,我希望查询返回null。

虽然我在原始SQL中实现了这一点,但是当我在Laravel中使用eloquent尝试相同时,我没有返回任何值。我做了以下事情:

$query = DB::table('subarea')

            ->join('user_subarea', function($join)
        {
            $value = \Auth::user()->id;
            $join->on( 'subarea.id', '=', 'user_subarea.subarea_id')->where('user_subarea.user_id', '=',$value);
        })
            ->leftJoin('branch', 'subarea.area_id', '=', 'branch.id')
            ->select('branch.name', 'subarea.name as subarea', 'user_subarea.active_search_lawyer', 'user_subarea.id' )

            ->get();

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

我自己找到答案只是在第一次加入时添加一个lefjoin。它不在laravel文档中,但也有效。

$query = DB::table('subarea')

            ->lefjoin('user_subarea', function($join)
        {
            $value = \Auth::user()->id;
            $join->on( 'subarea.id', '=', 'user_subarea.subarea_id')->where('user_subarea.user_id', '=',$value);
        })
            ->leftJoin('branch', 'subarea.area_id', '=', 'branch.id')
            ->select('branch.name', 'subarea.name as subarea', 'user_subarea.active_search_lawyer', 'user_subarea.id' )

            ->get();

答案 1 :(得分:0)

试试这个,如果您遇到问题,请发表评论。

$value = \Auth::user()->id;

$query = DB::table('subarea')
             ->where('user_subarea.user_id', '=',$value)
             ->leftJoin('user_subarea', 'subarea.id', '=', 'user_subarea.subarea_id')
             ->leftJoin('branch', 'subarea.area_id', '=', 'branch.id')
             ->select('subarea.name AS subname','subarea.area_id', 'branch.name', 'user_subarea.id','user_subarea.lawyer_id','user_subarea.active_search')
             ->get();