2017-12-06 3 views
2

Ich mag die Vorlage aus user_webhook Tisch in meinem database.In zu bekommen, wo Bedingung i user_id, app_id und wenn entweder notify_admin oder notify_customer Wert 1 in user_webhook table.I ist Überprüfung Abfrage ist mit ..Laravel-Modell mit oder in, wenn Bedingung?

$templates= $this->where('notify_admin',1) 
       ->orwhere('notify_customer',1) 
       ->where('user_webhooks.user_id',$user_id) 
       ->where('user_webhooks.app_id',$app_id) 
       ->select( 'webhooks.id as webhook_id','webhooks.app_id','webhooks.topic','webhooks.type','webhooks.action', 
          'webhooks.sms_template','user_webhooks.id','user_webhooks.notify_admin', 
          'user_webhooks.notify_customer','user_webhooks.user_id','user_webhooks.sms_template_status', 
          'user_webhooks.sms_template as sms' 
         ) 
       ->join ('webhooks',function($join){ 
         $join>on('webhooks.id','=','user_webhooks.webhook_id'); 
         }) 
       ->get() 
       ->toArray(); 

wenn ich Abfrage mit DB :: getQueryLog() erhalten, fand ich die Abfrage wie

select `telhok_webhooks`.`id` as `webhook_id`, `telhok_webhooks`.`app_id`, 
`telhok_webhooks`.`topic`, `telhok_webhooks`.`type`, `telhok_webhooks`.`action`, 
`telhok_webhooks`.`sms_template`, `telhok_user_webhooks`.`id`, 
`telhok_user_webhooks`.`notify_admin`, `telhok_user_webhooks`.`notify_customer`, 
`telhok_user_webhooks`.`user_id`, `telhok_user_webhooks`.`sms_template_status`, 
`telhok_user_webhooks`.`sms_template` as `sms` from `telhok_user_webhooks` 

inner join 
`telhok_webhooks` on `telhok_webhooks`.`id` = `telhok_user_webhooks`.`webhook_id` 

    where `notify_admin` = ? or `notify_customer` = ? and `telhok_user_webhooks`.`user_id` 
    = ? and `telhok_user_webhooks`.`app_id` = ? 

das Ergebnis der Abfrage gibt Ergebnis aller app_id und user_id scheint. Also bitte sagen Sie mir die Verwendung von OR in wo Zustand. Vielen Dank im Voraus.

Antwort

0

Sie können die Einschränkungen zusammenführen sowie die Abfrage oder Klauseln zur Abfrage hinzufügen. Die orWhere Methode akzeptiert die gleichen Argumente wie die in dem Verfahren:

$users = DB::table('users') 
       ->where('votes', '>', 100) 
       ->orWhere('name', 'John') 
       ->get(); 

erweiterte Nutzung:

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

Die wobei Methode überprüft, ob eine gegebene Spalte der Wert innerhalb des gegebenen Array enthalten ist:

$users = DB::table('users') 
        ->whereIn('id', [1, 2, 3]) 
        ->get(); 

Mehr: https://laravel.com/docs/5.5/queries

+0

Dank Sir Beispiel nützlich ist, diese beiden Spalten zu vergleichen. – ShaanSetia

+0

Sir Ich habe weniger Ansehen in stackoverflow, jetzt kann ich dir nur Dank als Belohnung geben. – ShaanSetia

+0

Sir es braucht auch 15 Ruf zu zeigen. – ShaanSetia

1

Ändern

->where('notify_admin',1) 
->orwhere('notify_customer',1) 

zu

->where(function($q){ 
    $q->where('notify_admin',1) 
    ->orWhere('notify_customer',1); 
}) 

Ohne dies wird die orWhere zu allen anderen wheres in Ihrer Abfrage zu vergleichen, anstatt nur

+0

Danke Herr, Beispiel ist nützlich – ShaanSetia