2017-09-25 1 views
0

で問題に参加することは今でSQL私は最初のテーブルは、カテゴリのすべての値を持っていますが、私は構造is_hidden列があるので、すべての顧客にすべてのカテゴリを表示したいいけない2つのテーブルを持っている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 

ですis_hidden列が私の他のテーブルに をされていないところ、私のSQLクエリは、私は、カテゴリを表示するために、いくつかのクライアントを承認していたすべての値を取得しています テーブル構造が

id cat_id client_id 
1  5   1 

は、今私はタブから、すべてのキャンペーンを表示したいですここでis_hiddenはnoで、テーブル2のクライアントを承認したので、カテゴリIDが5から表示されるようになったので、

希望の結果を得るにはどうすればいいですか?

ここに私が試みたのは私のコードです。

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

これは参加では達成できません。あなたはすべてのあなたがの記録は、それはあなたを助けることを願って取得するように、あなたの参加

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 eloquentに変換できますか?私はlaravelクエリに変更しているときにエラーが発生しています – mohit

0

cat_idにする必要があり、次のような労働組合を使用する必要があります。

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');     
      }); 
関連する問題