2017-05-02 24 views
1

有人可以帮助我,查询Builder也Laravel 5

这我的数据库SQL查询 My Table

SELECT supplier, 
MAX(IF(item_name = 'Lemon', price, NULL)) AS Lemon, 
MAX(IF(item_name = 'Apple', price, NULL)) AS Apple, 
MAX(IF(item_name = 'Durian', price, NULL)) AS Durian, 
MAX(IF(item_name = 'Mango', price, NULL)) AS Mango 
FROM offer 
where status = 'open' 
GROUP BY supplier 

如何通过Laravel的QueryBuilder使用此查询?谢谢...

回答

0
$results = DB::table('offer')->select(DB::raw("supplier, 
    MAX(IF(item_name = 'Lemon', price, NULL)) AS Lemon, 
    MAX(IF(item_name = 'Apple', price, NULL)) AS Apple, 
    MAX(IF(item_name = 'Durian', price, NULL)) AS Durian, 
    MAX(IF(item_name = 'Mango', price, NULL)) AS Mango")) 
->where('status', 'open') 
->groupBy('supplier') 
->get(); 

真的,查询生成器不是为复杂的查询。当他们得到的是复杂的,你可能会发现它更容易只是使用原始声明:

$results = DB::select("SELECT supplier, 
    MAX(IF(item_name = 'Lemon', price, NULL)) AS Lemon, 
    MAX(IF(item_name = 'Apple', price, NULL)) AS Apple, 
    MAX(IF(item_name = 'Durian', price, NULL)) AS Durian, 
    MAX(IF(item_name = 'Mango', price, NULL)) AS Mango 
FROM offer 
where status = 'open' 
GROUP BY supplier"); 
+0

感谢@Captain超文本,你的回答保存我的天,这完美的工作,,, –

+0

海兰@CaptainHypertext,非常感谢您以前的答案,我在我的查询中还有一个问题,我可以使'item_name'或'supplier'列的查询更具动态性。 在前面的例子中,我有4个'item_name'**(芒果,苹果,榴莲,柠檬)**。我真的不知道如何在我的查询中插入函数。 因为在实际情况下'item_name'是无限的,它可能是一个或多个 –

+0

@CristalTravel我没有真正花时间研究你的查询的逻辑,只是实现。你究竟想用这个查询做什么?为什么某些项目最终为NULL而其他人有价格?你的表结构又是什么? –