Laravel查询生成器 - 高级加入和选择

时间:2016-11-27 16:12:52

标签: php mysql sql laravel

我正在尝试整理我的原始查询,我对wordpress元键和元值感兴趣

如何使用Laravel Query Builder执行此操作?

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

谢谢

1 个答案:

答案 0 :(得分:0)

我在Database: Query Builder的帮助下构建了以下查询,我希望这对您有用。我没有测试过这个。

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