2016-11-29 23 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