0

Wie kann ich diese Art der Abfrage in Laravel laufen 5,4Benutzerdefinierte Abfragen in Laravel 5

 select items.id,items.name,total,region from items LEFT OUTER JOIN 
    (select purchases.region_id as region , sum(purchases_detail.quantity) 
    as total,purchases_detail.item_id 
    from purchases_detail 
    left join purchases on(purchases.id=purchases_detail.purchase_id) 
    GROUP BY purchases_detail.item_id) pd on (pd.item_id=items.id) 

, wenn ich das in DB versucht ('') :: wählen es gab mir eine Fehlermeldung:

SQLSTATE [42000]: Syntaxfehler oder Zugriffsverletzung: 1055 'amsdb.purchases.region_id' ist nicht in GROUP BY (SQL: Wählen Sie items.id, items.name, insgesamt, Region von Elementen LEFT OUTER JOIN (wählen Sie käufe.region_id als region, summe (käufe_detail.menge) als gesamt, einkäufe_detail.item_id f rom purchases_detail LEFT JOIN Einkäufe auf (purchases.id = purchases_detail.purchase_id) GROUP BY purchases_detail.item_id) pd auf (pd.item_id = items.id))

aber es funktioniert gut, wenn ich es Phpmyadmin laufen

+1

Sie sollten in Laravel strikt abschalten und alles wird funktionieren, wie es sollte. Wechseln Sie zu 'config/database.php' und ändern Sie im mysql Konfigurationsarray' strict => true' in 'strict => false'; – Maraboc

+0

@Maraboc Schlechte Ratschläge, er sollte seine Abfrage korrigieren. –

+0

@TimBiegeleisen Ithink auch wenn er die Abfrage repariert sollte er den strikten Modus updaten! – Maraboc

Antwort

0

Wie die Fehlermeldung Ihnen sagt, erscheint die purchases.region_id Spalte nicht als Aggregat, noch gruppieren Sie sie. Die schnelle Lösung ist nur diese Spalte entfernen von der inneren und äußeren Abfrage:

SELECT 
    items.id, 
    items.name, 
    pd.total 
FROM items 
LEFT JOIN 
(
    SELECT 
     t1.item_id, 
     SUM(t1.quantity) AS total 
    FROM purchases_detail t1 
    LEFT JOIN purchases t2 
     ON t2.id = t1.purchase_id 
    GROUP BY t1.item_id 
) pd 
    ON pd.item_id = items.id 
0

nicht sicher, aber ich denke, dass die select() Methode nicht alle Ihre SQL-Abfrage enthalten.

Ich weiß nicht, ob es funktioniert, aber versuchen Sie dieses. Es nutzt viele Query Builder Funktionen:

$subQuery = DB::table('purchases_detail') 
    ->select(DB::raw('purchases.region_id as region , sum(purchases_detail.quantity) 
    as total,purchases_detail.item_id')) 
    ->leftJoin('purchases', 'purchases.id', '=', 'purchases_detail.purchase_id') 
    ->groupBy('purchases_detail.item_id') 
    ->toSql(); 

$result = DB::table('items') 
    ->select('items.id', 'items.name', 'total,region') 
    ->leftJoin($subQuery . ' pd', 'pd.item_id', '=', 'items.id') // if not working, try ->leftJoin(DB::raw($subQuery) . ' pd', 'pd.item_id', '=', 'items.id') 
    ->get(); 

Da Ihre Abfrage eine verschachtelte SELECT hat, haben Sie es in zweimal zu machen.