2017-10-20 6 views
2

Y at-il un moyen d'atteindre une option WHERE dans Laravel, ceci est ma requêteLaravel clause WHERE facultative

$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(); 

Ici, je veux que cette ligne soit facultative

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

Ainsi, si le La recherche ne contient pas de temps, elle ignorera complètement cette ligne de requête.

whereDate est requis, mais whereTime n'est pas requis. Si la demande d'heure est obtenue, elle demandera l'heure, mais si la demande d'heure n'est pas obtenue, elle ignorera la requête whereTime et montrera le résultat pour whereDate seulement.

Comment puis-je réaliser cela dans Laravel?

+0

Vous pouvez décomposer en filtres http: // laraveltnt. com/conditional-eloquent-clauses/ – prola

Répondre

0

Vous pouvez utiliser la méthode 'when'. Lisez sur le sujet ici: 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

C'est probablement la bonne façon de le faire mais vous devriez vraiment donner un exemple – apokryfos

3

La chose simple à faire est:

$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();