2016-11-29 57 views
1

我刚开始学习Laravel并将常规PHP代码转换为Laravel。 我需要在Laravel中执行此查询,但失败。Lavarel sql查询..如果条件在哪里

SELECT sum(qty_del) as delivery from delivery_sap a where YEAR(a.bill_date) + IF(MONTH(a.bill_date)>6, 1, 0) = 2017 

这是我想出来的,但它失败了。

$data = DB::table('delivery_sap') 
      ->select(DB::raw('sum(qty_del) as delivery')) 
      ->whereRaw('YEAR(a.bill_date) + IF(MONTH(a.bill_date)>6, 1, 0) = 2017'); 
基于以下

$data = DB::table('delivery_sap') 
     ->select(DB::raw('sum(qty_del) as delivery')) 
     ->whereRaw('YEAR(bill_date) + IF(MONTH(bill_date)>6, 1, 0) = 2017') 
     ->first(); 

答案从GET(改变)

更正查询第一,因为我想它返回的一行

+1

日志说什么? – DZDomi

+1

在'whereRaw()'末尾使用'get()',看看结果是什么...... –

+0

你得到了什么错误? –

回答

2

您可以通过查询转储生成的查询并将其与原始查询进行比较:

use Illuminate\Support\Facades\DB; 

$query = DB::table('delivery_sap') 
    ->select(DB::raw('sum(qty_del) as delivery')) 
    ->whereRaw('YEAR(a.bill_date) + IF(MONTH(a.bill_date)>6, 1, 0) = 2017'); 

dd($query->toSql()); 

返回:

"select sum(qty_del) as delivery from `delivery_sap` where YEAR(a.bill_date) + IF(MONTH(a.bill_date)>6, 1, 0) = 2017" 

这与您的原始查询几乎完全相同。您需要连接呼叫与最后的get()以检索结果:

$data = DB::table('delivery_sap AS a') 
    ->select(DB::raw('sum(qty_del) as delivery')) 
    ->whereRaw('YEAR(a.bill_date) + IF(MONTH(a.bill_date)>6, 1, 0) = 2017') 
    ->get(); // <= Here 
+0

我得到这个日志 - > local.ERROR:找不到消息'Class'App \ Http \ Controllers \ DB'Symfony \ Component \ Debug \ Exception \ FatalErrorException' ' – Wahsei

+1

首先,您需要使用'use'语句将外观或别名导入命名空间。查看更新后的答案。 – sepehr

+0

GOT IT ..谢谢! ..注意事项 - 我将a.bill_date更改为bill_date以使其正常工作 – Wahsei