Красноречивый многомерный полиморфный вложенный запрос withCount - PullRequest
0 голосов
/ 29 октября 2018

У меня есть следующие многотомные полиморфные отношения

Asset

public function countries()
{
    return $this->morphToMany('App\Country', 'locationable');
}

Страна

public function assets()
{
    return $this->morphedByMany('App\Asset', 'locationable');
}

Также в категории есть множество объектов с активами

public function assets()
    {
        return $this->belongsToMany('App\Asset', 'category_asset');
    }

Мне нужно запросить категорию и активную загрузку активов, которым назначена страна.

Вот мой красноречивый запрос

$category = Category::with(['children.assets' => function ($query) {
            $query->whereHas('countries', function($q) {
                $q->where('code', '=', 'FR');
            });
        }])
            ->where('id', 1)
            ->first();

Кажется, это работает, но тогда, когда я использую модель Category с $ this-> assets, она загружает их все, даже если в запросе возвращается только одна.

Я использую ресурсы API вот так

AssetResource::collection($this->whenLoaded('assets'))

Где можно поместить условие, чтобы использовать только те активы, которые прошли условие, где ('code', '=', 'FR')

1 Ответ

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

Это была моя ошибка, я должен был проверить категории детей, как это:

Category::with(
                ['children' => function ($query) {
                $query->with(['children.assets' => function ($q) {
                    $q->country('GB');
                }]);
            }])
                ->where('id', 1)
                ->first();

Категория имеет детские категории

public function children()
    {
        return $this->belongsToMany('App\Category', 'parent_category_child_category', 'parent_category_id', 'child_category_id');
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...