Laravel поиск; фильтровать по сторонней таблице, а затем снова фильтровать результаты по локальной таблице - PullRequest
0 голосов
/ 29 октября 2018

У меня есть две таблицы «акции» и «продукты». У них есть отношения один ко многим.

Модель - Product.php

public function stocks(){
    return $this->hasMany('Modules\Stock\Entities\Stock');
}

Модель - Stock.php

public function product(){
    return $this->belongsTo('Modules\Product\Entities\Product')->withTrashed();
}

при поиске акций я также хочу искать по названию продукта. У меня есть поиск, созданный для поиска по ключевым словам, и дополнительный флажок для низких запасов. Поэтому, если я хочу найти товар с низким запасом, например, например, «Обувь», он должен показать мне туфли, количество которых мало.

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

class ProductName implements Filter
{
   public static function apply(Builder $builder, $value, $checkbox)
   {
      if($checkbox == null) {
         $a = $builder->whereHas ('product', function ($query) use ($value) 
         {
            $query->where('name', 'LIKE', '%' . $value . '%'); //this works fine.
         });
      } else {
        $a = $builder->whereHas ('product', function ($query) use ($value) {
            $query->where('name', 'LIKE', '%' . $value . '%');
        })->whereRaw('quantity < low_stock_threshold'); //This is meant for two search filters;one for searching in product table then filtering the results againtst stock table according to low quantity.
      }
      return $a;
   }
}

закомментированная строка, которая не работает. Пожалуйста, помогите, если кто-то может это исправить.

1 Ответ

0 голосов
/ 29 октября 2018

Я видел мой sql запрос и редактировал по мере необходимости, и он работал. Спасибо @Egretos за предложение.

class ProductName implements Filter
{
   public static function apply(Builder $builder, $value, $checkbox)
   {
       if($checkbox == null) {
           $a = $builder->whereHas ('product', function ($query) use ($value) {
               $query->where('name', 'LIKE', '%' . $value . '%');
           });
       } else {
           $a = $builder->whereHas ('product', function ($query) use ($value) {
               $query->where('name', 'LIKE', '%' . $value . '%');
           })->whereRaw('`stocks`.`quantity` < `stocks`.`low_stock_threshold`'); //edited this line and it worked.

       }
       return $a;
   }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...