Query-Bereich mit orWhere in Laravel 5.2

Mit Laravel 5.2, ich habe die folgende Abfrage Anwendungsbereich auf mein Modell:

public function scopeInProcess($query) {
    return $query->whereHas(
        'ApplicationStatus', function($query) {
            $query->whereRaw('(name = "New" OR name = "In-process")');
        }
    );
}

Den oben funktioniert gut, aber ich begann erst mit whereRaw() weil ich nicht bekommen konnte orWhere() zu arbeiten, wie beschrieben in der Dokumentation.

Soweit ich das beurteilen kann, sollte dies genau das tun die gleiche Sache wie whereRaw():

$query->where('name', 'New')->orWhere('name' , 'In-process');

Funktioniert es nicht, obwohl. Es gibt einfach zurück, alle Datensätze, einschließlich derjenigen, die mit anderen status-Namen.

  • haben Sie Hinzugefügt „return“ vor „$query->wo(…..);“ ?
InformationsquelleAutor Joseph | 2016-01-21



One Reply
  1. 4

    Es ist nicht dieselbe Sache zu machen. In Ihrem whereRaw() Sie umwickelt habe beide Bedingungen in Klammern, gruppieren Sie Sie zusammen. Dies ist, was Sie wollen. Jedoch, die where()->orWhere() nicht automatisch tun.

    Um Ihren gewünschten Funktionalität, die Sie benötigen, um Ihre Bedingungen, wie Sie in der whereRaw(). Sie tun dies, indem eine Schließung der where() – Methode, etwa so:

    public function scopeInProcess($query) {
        return $query->whereHas('ApplicationStatus', function($query) {
            $query->where(function($q) {
                $q->where('name', 'New')->orWhere('name', 'In-process');
            });
        });
    }

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.