Ejemplo n.º 1
0
 /**
  * Search models
  *
  * @param   QueryBuilder  $query
  * @param   string        $search
  * @return  QueryBuilder
  */
 public function scopeSearch($query, $search)
 {
     $search = trim($search);
     if (strlen($search)) {
         // Parse search
         $name = [];
         $venue = [];
         $city = [];
         $words = explode(' ', mb_strtolower($search));
         foreach ($words as $word) {
             $tokens = explode(':', $word, 2);
             // Defaults to event name
             if (count($tokens) == 1) {
                 $name[] = $word;
                 continue;
             }
             switch ($tokens[0]) {
                 case 'city':
                 case 'in':
                     $city[] = $tokens[1];
                     break;
                 case 'venue':
                 case 'at':
                     $venue[] = $tokens[1];
                     break;
                 default:
                     $name[] = $word;
             }
         }
         $query->where(function ($query) use($name, $venue, $city) {
             if ($name) {
                 $query->searchWhere(implode(' ', $name), 'name');
             }
             $query->whereHas('event', function ($query) use($name, $venue, $city) {
                 if ($name) {
                     $query->searchWhere(implode(' ', $name), 'name');
                 }
                 if ($venue) {
                     $query->searchWhere(implode(' ', $venue), 'venue_name');
                 }
                 if ($city) {
                     $query->searchWhere(implode(' ', $city), 'city_name');
                 }
             });
         });
     }
     return $query;
 }