Laravel тегов с и запрос - PullRequest
       4

Laravel тегов с и запрос

2 голосов
/ 11 января 2020

У меня есть опция фильтра товаров. И у пользователя есть фильтры разных типов на странице категории товаров.

Теги

id | tag_name | slug |

товары

id | proudct_name

product_tags

id | product_id | tag_id 

Сейчас я пытаюсь получить все продукты, где tag_name = "ddd" и tag_name = "ddd" .

Это означает, что продукт должен относиться к обеим категориям.

$response=Product::with(['productCategory'])
->when((isset($requestArray)&&count($requestArray)),function ($query)use($requestArray){

            $query->whereHas('productTags', function ($query) use ($requestArray) {

                $query->where(function ($query) use ($requestArray){

                    if (isset($requestArray['filterForm'])&&count($requestArray['filterForm'])){

                        $valueArray=[];
                        foreach ($requestArray['filterForm'] as $key=>$value){


                            if (is_array($value)&&count($value)){


                               $query->whereIn('tags.slug',$value);

                            } elseif($key!="country_list"){

                               $query->where('tags.slug',$value);

                            }


                        }


                    }
                });

            });
        })
            ->whereHas('productCategory',function ($query)use($request,$categoryName){
            $query->where('slug',$categoryName);
        });

У меня проблема, когда я выбираю комбинацию мобильного бренда и цвета мобильного телефона / если я выбираю только одну группу фильтров, тогда он работает прекрасный

1 Ответ

2 голосов
/ 11 января 2020

color и mobile_brand все находятся в tags.slug,

Плагин не может иметь значения цвета и mobile_brand одновременно.

Сделайте что-то вроде этого:

// You need to build the combination of mobile_band and color to array:
$slugs = array(['green', 'mi'], ['green', 'lg']);

$response = Product::with(['productCategory'])->where(function($query) use ($slugs) {
    forEach ($slugs as $tags)
    {
        $query->orWhere(function($query) use ($tags) {
            forEach($tags as $tag) 
            {
                $query->whereHas('productTags', function($query) use ($tag){
                     $query->where('tags.slug', $tag);
                });
            }
        });        
    }
});
...