Несколько whereHas не работает должным образом при фильтрации данных - PullRequest
2 голосов
/ 13 июля 2020

Я хочу отфильтровать данные о продукте на основе флажка, установленного пользователем.

Я тестирую его, используя метод ab c () в ProductController и отправляя ему ajax запрос со страницы просмотра передавая ему данные массива.

ProductController

public function abc(Request $request, Product $products)
{
    $products = $products->newQuery();

    if ($request->has('category')) {
        $category = $request->get('category');
        $products = $products->whereHas('category', function($query) use($category) {
                                    $query->where('category', 'LIKE', $category.'%'); //query fire to get product as per category name
                                });
    }
    
    if ($request->has('subCategory')) {
        $products = $products->whereIn('sub_category_id',$request->subCategory);
    }

    if ($request->has('color')) {
        $color = $request->color;
        $products = $products->whereHas('colors', function($q) use($color){
                                    $q->whereIn('colors.id',$color);
                                });
    }
    
    return $products->get();
}

JQuery код

$(document).ready(function(){

    var category = "{{ $category }}";
    $(document).on("click", ".sub-category-checkbox, .color-checkbox", function(){
        var subCategory = [];
        var color = [];
        $('#subCategoryFilter input[type="checkbox"]:checked').each(function() {
            subCategory.push($(this).val());
        });

        $('#colorFilter input[type="checkbox"]:checked').each(function() {
            color.push($(this).val());
        });
        $.ajax({
            url: "{{ route('abc') }}",
            type: "GET",
            data: { category : category, subCategory : subCategory, color : color },
            success: function(data){
                console.log(data);
            },
            error: function(error){
                console.log(error.responseJSON);
            }
        });
    });      

});

Я тестирование, поэтому я получаю $ category от контроллера, который передает эту $ category для просмотра (show_product.blade. php), в котором есть название категории, например, Men, Women, et c.

Проблема, с которой я сталкиваюсь, заключается в том, что когда пользователь устанавливает флажок подкатегории, например, рубашка, футболка, джинсы, он возвращает продукты, относящиеся к этой конкретной категории.

Но когда пользователь проверяет флажок цвета, он возвращает массив с продуктом, относящимся к выбранному цвету, а также возвращает другой массив, содержащий данные, относящиеся к ранее выбранным полям проверки. Например, при загрузке страницы fre sh он возвращает все товары, относящиеся к переданной категории, например, Мужчины. В тот момент, когда пользователи устанавливают флажок черного цвета, он возвращает один массив с продуктами, имеющими черный цвет, и другой массив с продуктами, имеющими категорию как мужчины.

Я не могу понять, почему он возвращает два массива данных .

1 Ответ

0 голосов
/ 13 июля 2020

хорошо, что сработало для меня, я изменил эту строку

$(document).on("click", ".sub-category-checkbox, .color-checkbox", function(){
    ..code..
});

На это

$(document).on("change", ".sub-category-checkbox, .color-checkbox", function(){
    ..code..
});

Был глупая ошибка

...