【问题标题】:Convert mysql query into Eloquent laravel query将 mysql 查询转换为 Eloquent laravel 查询
【发布时间】:2016-11-27 23:58:22
【问题描述】:

我正在尝试在 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 表可能有一条记录与 subarea 表的 id 匹配,其中 active_search 等于 0 或 1。如果它不存在,我希望查询返回 null。

当我在 Laravel 中尝试 eloquent 时,我能够在原始 SQL 中实现这一点,但我没有返回任何值。我做了以下事情:

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

任何帮助将不胜感激。

【问题讨论】:

    标签: php mysql laravel


    【解决方案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();
    

    【讨论】:

      【解决方案2】:

      试试这个,如果有问题,请评论。

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

      【讨论】:

      • Sachith,感谢您的回答,但没有返回确切的内容。反正我自己已经找到答案了:
      • @lostintheriver 好,请发布您的答案。它将帮助其他有相同情况的人
      猜你喜欢
      • 1970-01-01
      • 2017-03-10
      • 2020-09-19
      • 1970-01-01
      • 2021-12-29
      • 1970-01-01
      • 2020-10-03
      • 2016-11-23
      • 1970-01-01
      相关资源
      最近更新 更多