598 Stimmen

Wie erstellt man eine Abfrage mit mehreren WHERE-Klauseln unter Verwendung von Laravel Eloquent?

Ich verwende den Laravel Eloquent Query Builder und habe eine Abfrage, bei der ich eine WHERE-Klausel mit mehreren Bedingungen haben möchte. Es funktioniert, aber es ist nicht elegant.

Beispiel:

$results = User::where('this', '=', 1)
    ->where('that', '=', 1)
    ->where('this_too', '=', 1)
    ->where('that_too', '=', 1)
    ->where('this_as_well', '=', 1)
    ->where('that_as_well', '=', 1)
    ->where('this_one_too', '=', 1)
    ->where('that_one_too', '=', 1)
    ->where('this_one_as_well', '=', 1)
    ->where('that_one_as_well', '=', 1)
    ->get();

Gibt es einen besseren Weg, dies zu tun, oder sollte ich bei dieser Methode bleiben?

19voto

DsRaj Punkte 2288
Model::where('column_1','=','value_1')
       ->where('column_2 ','=','value_2')
       ->get();

ODER

// Falls Sie nach einem gleichen Wert suchen, müssen Sie kein = hinzufügen
Model::where('column_1','value_1')
        ->where('column_2','value_2')
         ->get();

ODER

Model::where(['column_1' => 'value_1',
              'column_2' => 'value_2'])->get();

15voto

Majbah Habib Punkte 4216

Mehrere where-Klauseln

    $query=DB::table('users')
        ->whereRaw("users.id BETWEEN 1003 AND 1004")
        ->whereNotIn('users.id', [1005,1006,1007])
        ->whereIn('users.id',  [1008,1009,1010]);
    $query->where(function($query2) use ($value)
    {
        $query2->where('user_type', 2)
            ->orWhere('value', $value);
    });

   if ($user == 'admin'){
        $query->where('users.user_name', $user);
    }

schließlich das Ergebnis erhalten

    $result = $query->get();

10voto

Alex Quintero Punkte 1158

Die Methode whereColumn kann mit einem Array von mehreren Bedingungen übergeben werden. Diese Bedingungen werden unter Verwendung des Operators and verbunden.

Beispiel:

$users = DB::table('users')
            ->whereColumn([
                ['first_name', '=', 'last_name'],
                ['updated_at', '>', 'created_at']
            ])->get();

$users = User::whereColumn([
                ['first_name', '=', 'last_name'],
                ['updated_at', '>', 'created_at']
            ])->get();

Für weitere Informationen überprüfen Sie diesen Abschnitt der Dokumentation https://laravel.com/docs/5.4/queries#where-clauses

9voto

Nikunj Gadhiya Punkte 148

Mehrfach "where"

  • Sie können auch ein Array von Bedingungen an die "where" -Funktion übergeben. Jedes Element des Arrays sollte ein Array sein, das die drei Argumente enthält, die üblicherweise an die "where" -Methode übergeben werden:

    Model::where([ ['status', '=', '1'], ['subscribed', '<>', '1'], ])->get();

Mehrere oder "Where"-Klauseln

  • Wenn Sie eine "oder"-Bedingung in Klammern gruppieren müssen, können Sie als erstes Argument an die "orWhere" -Methode eine Closure übergeben:

    Model::where('votes', '>', 100) ->orWhere(function ($query) { $query->where('name', 'abcd') ->orWhere(function ($query) { $query->where('name', 'cdef') ->where('votes', '>', 50); }); }) ->get();

Das oben gezeigte Beispiel liefert das folgende SQL:

select * from `users` where `votes` > 100 or (`name` = "abcd" or (`name` = "cdef" and `votes` > 50));

Mehrere "where" mit "whereNot" und "orWhereNot"-Methode

  • Die Methoden "whereNot" und "orWhereNot" können verwendet werden, um eine gegebene Gruppe von Abfragebeschränkungen zu negieren. Zum Beispiel schließt die folgende Abfrage Produkte aus, die im Abverkauf sind oder deren Preis weniger als zehn beträgt:

    $products = Product::where([ ['status', '=', '1'], ['is_feature', '1'] ]) ->whereNot(function ($query) { $query->where('clearance', true) ->orWhere('price', '<', 10); }) ->get();

7voto

Lim Kean Phang Punkte 481
$projekte = DB::table('projekte')->where([['titel','like','%'.$eingabe.'%'],
    ['status','<>','Ausstehend'],
    ['status','<>','Nicht verfügbar']])
->orwhere([['besitzer', 'like', '%'.$eingabe.'%'],
    ['status','<>','Ausstehend'],
    ['status','<>','Nicht verfügbar']])->get();

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X