2016-06-05 19 views
-1

Ich war durch diese verwirrt, wo clsuses, ich habe diesen Code, nannte ich die vergangenen Aufträge. Es funktioniert jetzt gut.Wo oder wo Klauseln funktioniert nicht gut in Laravel

$orders = Order::where('user_id', '=', Auth::user()->id) 
      ->orWhere(function ($query2) { 
       $query2->where('status', '=', 2) 
         ->where('status', '=', 3); 
      }) 
      ->orderBy('created_at', 'DESC') 
      ->get(); 

dann habe ich eine foreach unter diesem Code. Dann habe ich eine andere, wo Variable:

$orders_current = Order::where('user_id', '=', Auth::user()->id) 
      ->orWhere(function ($query) { 
       $query->where('status', '=', 0) 
         ->where('status', '=', 1); 
      }) 
      ->orderBy('created_at', 'DESC') 
      ->get(); 

Und ab jetzt alle foreach Ergebnisse seltsam aussieht, ist es, alle Daten mit allen Status in jedem Datensatz zeigt aktuelle und vergangene. Muss ich einen der obigen Codes auf eine andere Methode verschieben oder gibt es andere Möglichkeiten, dies zu vermeiden? und was genau hier passiert ist, bitte erklären.

danke.

Antwort

1
$orders_current = Order::where('user_id', '=', Auth::user()->id) 
     ->where(function ($query) { 
      $query->where('status', '=', 0) 
        ->OrWhere('status', '=', 1); 
     }) 
     ->orderBy('created_at', 'DESC') 
     ->get(); 

Ich hoffe, dass Ihnen helfen ..

+0

waw das hat funktioniert. Vielen Dank – RK26

2

Es sieht so aus, als ob Sie die Methoden where und orWhere miteinander vermischt haben. Die erste fügt der WHERE-Anweisung eine AND-Klausel hinzu, während die zweite eine OR-Klausel hinzufügt.

, dass die resultierenden Anfragen bedeutet, sind:

SELECT * 
FROM orders 
WHERE user_id = ? 
    OR (status = 0 AND status = 1) 
ORDER BY created_at DESC 

Der zweite Teil des OR wird nie wahr sein, und Sie werden wahrscheinlich nur alle Benutzeraufträge in jeder der beiden Abfragen zu sehen.

Sie können immer die getQueryLog-Methode verwenden, um zu sehen, wie die SQL-Abfrage gebildet wird.

+0

omg das ist sinnvoll, jetzt verstehe ich. Danke. – RK26