2015-03-05 4 views
1

У меня есть следующиеLaravel возвращаемых результатов на основе выбора пользователя

HTML

<input type="checkbox" name="symbols[]" value="1" /> 
<input type="checkbox" name="symbols[]" value="2" /> 
<input type="checkbox" name="symbols[]" value="3" /> 
etc... 
<select name="city"> 
    <option value="Dublin">Dublin</option> 
    <option value="Cork">Cork</option> 
    etc ... 
</select> 

Laravel

return DB::table('restaurants') 
      ->select('restaurants.id as restaurantId', 
        'restaurants.image_id as imageId', 
        'restaurants.name as restaurantName', 
        'restaurants.slug as restaurantSlug', 
        'restaurants.description as restaurantDescription') 
      ->leftJoin('restaurants_symbols', 'restaurants_symbols.restaurant_id', '=', 'restaurants.id') 
      ->leftJoin('restaurants_locations', 'restaurants_locations.restaurant_id', '=', 'restaurants.id') 
      ->groupBy('restaurants_symbols.restaurant_id') 
      ->where(function($q) use ($input) { 
       $q->whereIn('restaurants_symbols.symbol_id', $input['symbol']); 

       if(!empty($input['city'])) { 
        $q->where('restaurants_locations.city', $input['city']); 
       } 
      }) 
      ->get(); 

Все работает отлично кроме того факта, что если пользователь проверяемого значение1 и значение2, тем запрос возвращает все рестораны, которые содержат value1 ИЛИ value2, поэтому я хочу добиться возврата только ресторанов, у которых есть символы, представляющие значение 1 и значение2 только.

Любые предложения? Я думал, может быть, вернуть значения так, как они есть, а затем отфильтровать их в цикле foreach, но я не знаю, возможно ли это, и если это я, я не вижу логики, как это сделать, любые мысли об этом ?

ответ

0

Попробуйте это ..

Используйте forloop для того, где conditions.Its вернуться значение1 и значение2 для вашего случая

$symbol=$input['symbol']; 
    return DB::table('restaurants') 
       ->select('restaurants.id as restaurantId', 
         'restaurants.image_id as imageId', 
         'restaurants.name as restaurantName', 
         'restaurants.slug as restaurantSlug', 
         'restaurants.description as restaurantDescription') 
       ->leftJoin('restaurants_symbols', 'restaurants_symbols.restaurant_id', '=', 'restaurants.id') 
       ->leftJoin('restaurants_locations', 'restaurants_locations.restaurant_id', '=', 'restaurants.id') 
       ->groupBy('restaurants_symbols.restaurant_id') 
       ->where(function($q) use ($input) { 
    for($i=0;$i<count($symbol);$i++)    //add forloop 
    { 
        $q->where('restaurants_symbols.symbol_id', $symbol[$i]); 
    } 

        if(!empty($input['city'])) { 
         $q->where('restaurants_locations.city', $input['city']); 
        } 
       }) 
       ->get(); 
+0

Спасибо за быстрый ответ. Я попробовал, и я вернул ошибку «Неопределенное смещение: 0» – lesandru

+0

Опубликуйте свой массив $ input ['symbol'] –

+0

array (2) {[0] => string (1) "1" [1] => string (2) «29»} – lesandru

Смежные вопросы