2017-09-25 176 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');     
      });