2016-09-26 8 views
1

Здравствуйте, ребята,whereHas запрос в Laravel

 $filterArray = explode("_", $filters); 

     $data['articles'] = \DB::table('products')->join('product_category', function ($q) { 
      $q->on('product_category.product_id', '=', 'products.id'); 
     })->where('product_category.category_id', '=', $id) 
      ->select('products.*') 
      ->whereBetween('price_retail_1', array($priceFrom, $priceTo)) 
      ->whereHas('filters', function ($query, $filterArray) { 
       $query->whereIn('filter_id', $filterArray); 
      }) 
      ->orderBy('products.' . $sort, $sortOrder) 
      ->get(); 
    } 

У меня есть следующий запрос, и у меня возникают некоторые вопросы по методу whereHas. Я получаю сообщение об ошибке

Unknown column 'has' in 'where clause 

скорее всего потому, что переменная $ filterArray выходит за рамки для функции (или, по крайней мере, это то, что я угадал. Любая помощь о том, как решить этот вопрос ценится.

ответ

1

вы не можете использовать whereHas метод в контексте Построителя запросов. метод whereHas только для красноречивого Query Builder, который пришедший с красноречивыми моделей и их отношений.

что вы можете сделать, это использовать joins. Таким образом, можешь попробовать как это:

$filterArray = explode("_", $filters); 

$data['articles'] = \DB::table('products')->join('product_category', function ($q) { 
     $q->on('product_category.product_id', '=', 'products.id'); 
    })->where('product_category.category_id', '=', $id) 
     ->select('products.*') 
     ->whereBetween('price_retail_1', array($priceFrom, $priceTo)) 
     ->join('filters', 'products.filter_id', '=', 'filters.filter_id') 
     ->whereIn('filter_id', $filterArray); 
     ->orderBy('products.' . $sort, $sortOrder) 
     ->get(); 

Я не знаю, как вы, соединяющим эти две таблицы, так вот только пример данных:

->join('filters', 'products.filter_id', '=', 'filters.filter_id') 
+0

Разум дает мне пример? Поскольку таблица фильтров может содержать несколько строк одного и того же продукта, мне нужно выполнить поиск OR WHERE на основе данных, данных в массиве фильтров. – kjanko

+0

Конечно. Я верну свою запись. –

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