简体   繁体   English

将mysql查询转换为Eloquent laravel查询

[英]Convert mysql query into Eloquent laravel query

I am trying to make the following query in 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

The idea is to obtain the subareas and see if the search is activated by the user. 想法是获得子区域并查看用户是否激活了搜索。

The user_subarea table might have a record that matches the id of the subarea table where the active_search is equal to 0 or 1. If it doesn't exist I would like the query to return null. user_subarea表可能具有与active_search等于0或1的子区域表的id匹配的记录。如果它不存在,我希望查询返回null。

While I was able to achieve this in raw SQL when I try the same with eloquent in Laravel I am not returning any value. 虽然我在原始SQL中实现了这一点,但是当我在Laravel中以雄辩的方式尝试相同时,我没有返回任何值。 I have done the following: 我做了以下事情:

$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();

Any help will be much appreciated. 任何帮助都感激不尽。

I found by myself the answer it was just to add a lefjoin in the first join. 我自己找到答案只是在第一次加入时添加一个lefjoin。 It is not in the laravel docs but works too. 它不在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();

Try this one, If you get a problem, please comment. 试试这个,如果你遇到问题,请发表评论。

$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();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM