2016-11-27 11 views
2

に参加して、選択しLaravelクエリビルダでこれを行うにはどのようにLaravelクエリビルダ - 高度

私は私の生のクエリを整理しようとしていると私はワードプレスメタキーとメタ価値に興味がありますか?

META TABLE == 
meta_id | post_id | meta_key | meta_value 
1  | 101  | quantity | 8 
2  | 101  | price | 100 
3  | 102  | quantity | 7 
4  | 102  | price | 56 
5  | 103  | quantity | 12 
6  | 103  | price | 256 

POST TABLE == 
post_id | about 
101  | Pencil | Luxurious pencil only for you 
102  | Eraser | All your mistakes, gone! 
103  | Pen  | Unrivaled penmanship, stronger than sword. 

問合せ:

select 
    p.post_id, 
    p.name, 
    p.about, 
    m1.meta_value, 
    m2.meta_value 
from post_table p 
    inner join meta_table m1 
     on m1.post_id = p.post_id and m1.meta_key = 'quantity' 
    inner join meta_table m2 
     on m2.post_id = p.post_id and m2.meta_key = 'price' 
where CAST(m1.meta_value as int) < 10 
order by CAST(m1.meta_value as int) asc 

私はDatabase: Query Builderの助けを借りて、以下のクエリを構築し、私はこれがあなたのために働くことを願っていますあなたに

答えて

0

ありがとうございます。私はこれをテストしていません。

DB::table('post_table AS p') 
      ->select('p.post_id', 'p.name', 'p.about', 'meta_value', 'meta_value') 
      ->join('meta_table AS m1','m1.post_id','=','p.post_id') 
      ->where('m1.meta_key', 'quantity') 
      ->join('meta_table AS m2','m2.post_id','=','p.post_id') 
      ->where('m2.meta_key', 'price') 
      ->where(DB::raw('CAST(m1.meta_value AS INT)','<',10) 
      ->orderBy(DB::raw('CAST(m1.meta_value AS INT)'), 'asc') 
      ->get(); 
関連する問題