2017-09-25 86 views
0

我有2个表,其中一台具有类别的所有值,但我不希望显示所有类别的每一位顾客所以is_hidden结构的柱是SQL连接问题与Laravel

cat_id cat_name is_hidden 
    1   cat   no 
    2   cat1  no 
    3   cat2  no 
    4   cat3  no 
    5   cat4  yes 
    6   cat5  yes 

现在我的SQL查询我得到的所有值,其中is_hidden列没有 在我的其他表我正在审批一些客户端以显示分类 表结构是

id cat_id client_id 
1  5   1 

现在我想显示所有来自标签的运动其中is_hidden是没有,现在我已经批准表2中的客户,所以它也应该显示5的类别ID

现在我怎么可以加入SQL来获得所需的结果。

这是我的代码,我试过。

Approvals::where('client_id',$client_id) 
      ->rightJoin('tbl_cat', function ($join) { 
       $join->on('tbl_cat.cat_id', '=', 'tbl_approval.approval_id'); 
       $join->where('tbl_cat.is_hidden','=','no');     
      }); 

但我没有得到类别5的输出。

+0

不使用连接。 https://laravel.com/docs/5.5/eloquent-relationships –

+0

@PhilippSander你能指导我如何才能实现它与关系 – mohit

+0

@sunitiyadav我使用相同的代码 – mohit

回答

1

这不能通过加入来实现。你应该使用UNION ALL像下面

SELECT 
    * 
FROM 
    table1 
WHERE 
    is_hidden = 'no' 
UNION ALL 
    SELECT 
     t.* 
    FROM 
     table2 t2 INNER JOIN table1 t ON t.id = t2.cat_id 
    WHERE 
     t2.client_id = 1 
+0

您能否将此查询转换为laravel雄辩。当我将其更改为laravel查询时,出现错误 – mohit

0

你的加入应该是cat_id,这样你会得到的cat_id 5. 希望它会帮助你记录。

Approvals::where('client_id',$client_id) 
      ->rightJoin('tbl_cat', function ($join) { 
       $join->on('tbl_cat.cat_id', '=', 'tbl_approval.cat_id'); 
       $join->where('tbl_cat.is_hidden','=','no');     
      });