2017-10-20 3 views
2

Gibt es eine Möglichkeit, eine optionale WHERE in Laravel zu erreichen, das ist meine AbfrageLaravel Optional WHERE-Klausel

$people = \App\people::query() 
     -> select ('people.name', 'people.username', 'price', 'service','people.city', 'people.streetaddress', 'people.postalcode', DB::raw("GROUP_CONCAT(DATE_FORMAT(datetime, '%H:%i')) as times")) 
     -> groupBy('people') 
     -> leftjoin ('services' , 'people.id', '=', 'services.people_id') 
     -> leftjoin ('imagesforpeople' , 'people.id', '=', 'imagesforpeople.people_id') 
     -> whereDate ('datetime', '=', $request->get('date')) 
     -> whereTime ('datetime', '=', $request->get('time')) 
     -> get(); 

Hier möchte ich diese Linie

-> whereTime ('datetime', '=', $request->get('time')) 

So optional sein, wenn die Die Suche enthält keine Zeit, sie ignoriert diese Abfragezeile vollständig.

whereDate erforderlich ist, aber whereTime ist nicht erforderlich. Wenn die Zeitanforderung abgerufen wird, wird die Zeit abgefragt, aber wenn die Zeitanforderung nicht abgerufen wird, ignoriert sie die Abfrage whereTime und zeigt nur das Ergebnis für whereDate an.

Wie kann ich dies in Laravel erreichen?

+0

Sie können brechen sie in Filter http: // laraveltnt. com/conditional-eloquent-clauses/ – prola

Antwort

0

Sie können die Methode 'when' verwenden. Informieren Sie sich über es hier: https://laravel.com/docs/5.5/queries#conditional-clauses

$people = \App\people::query() 
      -> select ('people.name', 'people.username', 'price', 'service','people.city', 'people.streetaddress', 'people.postalcode', DB::raw("GROUP_CONCAT(DATE_FORMAT(datetime, '%H:%i')) as times")) 
      -> groupBy('people') 
      -> leftjoin ('services' , 'people.id', '=', 'services.people_id') 
      -> leftjoin ('imagesforpeople' , 'people.id', '=', 'imagesforpeople.people_id') 
      -> whereDate ('datetime', '=', $request->get('date')) 
      -> when($request->get('time'), function($query) use($request) { 
       $query->where('datetime', '=', $request->get('time') 
      })-> get(); 
+0

Dies ist wahrscheinlich der richtige Weg, aber Sie sollten wirklich ein Beispiel geben – apokryfos

3

Die einfache Sache zu tun ist:

$peopleQuery = \App\people::query() 
     -> select ('people.name', 'people.username', 'price', 'service','people.city', 'people.streetaddress', 'people.postalcode', DB::raw("GROUP_CONCAT(DATE_FORMAT(datetime, '%H:%i')) as times")) 
     -> groupBy('people') 
     -> leftjoin ('services' , 'people.id', '=', 'services.people_id') 
     -> leftjoin ('imagesforpeople' , 'people.id', '=', 'imagesforpeople.people_id') 
     -> whereDate ('datetime', '=', $request->get('date')); 
     if ($request->has("time")) { 
      $peopleQuery->whereTime ('datetime', '=', $request->get('time')); 
     } 
     $people = $peopleQuery->get();