2016-11-29 5 views
1

Ich habe gerade angefangen Laravel zu lernen und den regulären PHP-Code zu Laravel zu konvertieren. Ich muss diese Abfrage in Laravel ausführen, aber fehlgeschlagen.Lavarel SQL Abfrage .. wenn Bedingung in Wo

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

Das ist, was ich gefunden habe, aber es failes.

$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'); 

Korrigierte Abfrage auf der Grundlage der Antwort unten

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

von get geändert(), um zuerst als ich es als eine Zeile

+1

Was sagt das Protokoll? – DZDomi

+1

Verwenden Sie 'get()' am Ende Ihrer 'whereRaw()' und sehen, was das Ergebnis ist ... –

+0

Welchen Fehler erhalten Sie? –

Antwort

2

Sie können Dump die erzeugte Abfrage von der Abfrage zurückkehren wollte Builder und es auf die ursprüngliche Abfrage vergleichen:

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

es gibt:

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

Das ist fast identisch mit Ihrer ursprünglichen Abfrage. Sie müssen die Anrufe mit einem abschließenden get() verketten, um die Ergebnisse abzurufen:

$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

Ich habe dieses Protokoll -> local.ERROR: Ausnahme 'Symfony \ Component \ Debug \ Exception \ FatalErrorException' mit der Nachricht 'Class' App \ Http \ Controllers \ DB 'nicht gefunden ' – Wahsei

+1

Zuerst müssen Sie die Fassade oder den Alias ​​mit einer' use'-Anweisung in den Namespace importieren. Siehe die aktualisierte Antwort. – sepehr

+0

GOT IT..Danke! .. Point to Note - Ich habe auch das a.bill_date in bill_date geändert, damit es funktioniert – Wahsei

Verwandte Themen