Фильтр Laravel по строке запроса - PullRequest
0 голосов
/ 01 июля 2018

Я передаю запрос в URL ?color=green&&size=xxl;

В моем контроллере я получаю запрос с

$request->query(); 

Возвращает

  {"color":"green","size":"xxl"}

Как искать варианты таблицы, в которых столбец 'option' должен иметь 'color' и 'size' и соответствующий ' значения ' столбец должен иметь' зеленый и 'xxl'

редактировать Это Variation модель

class Variation extends Model
{
     public function sku()
     {
        return $this->belongsTo(Sku::class);
     }

     public function opt()
     {
        return $this->belongsTo(Option::class, 'option_id');
     }

     public function product()
     {
        return $this->belongsTo(Product::class);
     }
}

Метод контроллера:

 public function productQ(Request $request,$slug,$sku)
    {    

        $query = $request->query();
        $condition = [];

        Variation::where($query)->get();

    }

Обновление: Решение Алихосейна Шахаби работает с небольшой модификацией

 $my_query=Variation::query();
  foreach ($request->query() as $key=>$value)
  {
      $my_query->where('option',$key)->where('value',$value);
  }

   return   $result= $my_query->get();

Ответы [ 3 ]

0 голосов
/ 01 июля 2018

Пожалуйста, попробуйте

public function productQ(Request $request,$slug,$sku)
{    
    $query = new Variation();

    $searchable = $query->getFillable();
    $queryParams = $request->all();

    foreach ($queryParams as $field => $value) {
        if (in_array($field, $searchable) {
            $query = $query->where($field, $value);
        }
    }

    $variations = $query->get();
}
0 голосов
/ 01 июля 2018

Вы можете использовать этот код:

$my_query=Variation::query();
foreach ($request->query() as $key=>$value)
{
    $my_query->where($key,$value);
}

$result= $my_query->get();

или вы можете увидеть SQL, используя dd($my_query->toSql()); insted из $my_query->get();

0 голосов
/ 01 июля 2018

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

Products::where(function($query) {
    $query->where('option', '=', 'color')->where('values', '=', 'green')
})
->where(function($query) {
    $query->where('option', '=', 'size')->where('values', '=', 'xxl')
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...