2016-11-27 128 views
3

我试图让下面的查询中laravel:转换MySQL查询到机锋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中尝试使用同样的口才时,我没有返回任何值。我做了以下几点:

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

任何帮助将不胜感激。

回答

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(); 
+0

Sachith,谢谢你的回答,但没有完全回报。无论如何,我已经找到了自己的答案: – lostintheriver

+0

@ lostintheriver好,请张贴您的答案。它会帮助其他人有相同的情况 – Sachith

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