Laravel 5 Beredsam, wo und oder in Klauseln

76

Ich versuche, Ergebnisse aus einer Tabelle mit mehreren where- und / oder Klauseln zu erhalten.

Meine SQL-Anweisung lautet:

SELECT * FROM tbl
WHERE m__Id = 46
AND
t_Id = 2
AND
(Cab = 2 OR Cab = 4)

Wie kann ich das mit Laravel Eloquent erreichen?

Mein Code in Laravel lautet:

$BType = CabRes::where('m_Id', '=', '46')
                        ->where('t_Id', '=', '2')
                        ->where('Cab', '2')
                        ->orWhere('Cab', '=', '4')
                        ->get();
Crni
quelle

Antworten:

144

Verwenden von Advanced Wheres :

CabRes::where('m__Id', 46)
      ->where('t_Id', 2)
      ->where(function($q) {
          $q->where('Cab', 2)
            ->orWhere('Cab', 4);
      })
      ->get();

Oder noch besser mit whereIn():

CabRes::where('m__Id', 46)
      ->where('t_Id', 2)
      ->whereIn('Cab', $cabIds)
      ->get();
Limon Monte
quelle
Vielen Dank, dass dies funktioniert :) Aber wie kann ich das mit einem Array für Taxi bekommen, wenn mein Array mag: arrCab [2,4,6]
Crni
Warum ist es besser und woher kommt die Variable $cabIds?
Raarts
Die zweite Option ist die beste
Arun Yokesh
Darf ich Sie bitten, sich hier eine Frage zum Thema Laravel-Tabelle anzuschließen: stackoverflow.com/questions/52149031/… ?
Istiaque Ahmed
30

Wenn Sie eine Variable haben,

CabRes::where('m_Id', 46)
      ->where('t_Id', 2)
      ->where(function($q) use ($variable){
          $q->where('Cab', 2)
            ->orWhere('Cab', $variable);
      })
      ->get();
Jaber Al Nahian
quelle
Können Sie verlinken, woher Sie die "Verwendung" haben? Ich habe sie in meiner Forschung nicht gefunden.
Natghi
6

Wenn wir mehrere and(wo) Bedingungen mit der letzten (wo + oder wo) verwenden, schlägt die wo Bedingung die meiste Zeit fehl. dafür können wir die verschachtelte where-Funktion mit darin übergebenen Parametern verwenden.

$feedsql = DB::table('feeds as t1')
                   ->leftjoin('groups as t2', 't1.groups_id', '=', 't2.id')
                    ->where('t2.status', 1)
                    ->whereRaw("t1.published_on <= NOW()") 
                    >whereIn('t1.groupid', $group_ids)
                   ->where(function($q)use ($userid) {
                            $q->where('t2.contact_users_id', $userid)
                            ->orWhere('t1.users_id', $userid);
                     })
                  ->orderBy('t1.published_on', 'desc')->get();

Die obige Abfrage überprüft alle where-Bedingungen und prüft schließlich, wo t2.status = 1 und (wobei t2.contact_users_id = '$ userid' oder wo t1.users_id = '$ userid')

Hemamalini
quelle
-1

Sie können stattdessen versuchen, den folgenden Code zu verwenden:

 $pro= model_name::where('col_name', '=', 'value')->get();
Souvik gewinnen
quelle