@Mass1veDit
c#,php

Фильтр работает некоректно,вытаскиваются все товары даже не с привязанными авторами.Как лучше сделать фильтр?

Хочу сделать фильтр,отношение многие ко многим
К категориям привязаны товары,к определенным товарам привязаны их авторы(Их может быть несколько)
в json хочу вывести коллекцию товаров с выбранными авторами

например:

делается фильтр на 1 категорию,в фильтре выбирается id автора товара, например 1 или 1 и 2 и т.д

и нужно вывести категорию саму+ только товары,в которых есть авторы из фильтра
у меня почему то вытаскивается все товары

public function filter($category)
    {
        $sortDirection = 'desc';
        $tags = ['1','2'];
 
        return CategoryResource::collection(Category::with(['products.authors' => function ($query) use ($sortDirection,$tags) {
            $query->whereIn('user_id', $tags)->orderBy('id', $sortDirection);
        }])
            ->where('id',$category)
            ->get());
 
    }


Модель Category
public function products() {
        return $this->hasMany(Product::class);
    }

Модель Products

public function authors() {
        return $this->belongsToMany(User::class,'product_user','product_id');
    }

Что выводится у меня

"id": 2,
            "name": "Категория 1 ",
            "count": 2,
            "products": [
                {
                    "id": 2,
                    "name": "Товар 1",
                    "description": "Описание",
                    "authors": [
                        {
                            "id": 1,
                            "firstname": "Ivanov 1",
                            "lastname": "Ivanov 1",
                        },
                        {
                            "id": 2,
                            "firstname": "lan",
                            "lastname": "lanov",
                        }
                    ]
                },
                {
                    "id": 2,
                    "name": "Товар 2",
                    "description": "Описание",
                    "authors": []
                }
            ]


у "Товар 2" нету привязанных авторов
И когда указываю
$tags = ['1'];
выводится все тоже самое,но в товаре 1 автора нету

"id": 2,
                    "name": "Товар 1",
                    "description": "Описание",
                    "authors": [
                        {
                            "id": 1,
                            "firstname": "Ivanov 1",
                            "lastname": "Ivanov 1",
                        },
  • Вопрос задан
  • 100 просмотров
Пригласить эксперта
Ответы на вопрос 1
Метод with не фильтрует данные - он лишь фильтрует отношения
Для того, чтобы получить нужные данные - нужно использовать whereHas

with(['products' => function ($query) use ($sortDirection, $tags) {
        $query->whereHas('authors' ,function ($q) use ($tags) {
                $query->whereIn('user_id', $tags);
        })->orderBy('id', $sortDirection);
}])
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы