Laravel получает пармы моделей

#php #laravel

Вопрос:

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

 $user = User::with('stats')->findOrFail(Auth::id());
 

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

 public function stats()
    {
        return $this->hasMany(UserCountries::class)->with(array('country', 'products' => function($query) {
            $query->where('user_id', Auth::id());
        }));
    }
 

Итак, вот отношение для доступных для пользователей стран, и правильно получает страну и продукты. Но проблема в том, чтобы получить продукты для этой конкретной страны. Итак, что я сделал в модели стран пользователей, так это:

 public function products()
    {
        return $this->hasMany(Products::class, 'countries_id', 'countries_id')->with(['sales' => function($query) {
            $query->where('country_id', 'de1921be-2b93-4d16-924b-5c9e73fd16ad');
        }]);
    }
 

Таким образом , он получит страны и перечислит продукты для страны с идентификатором de1921be-2b93-4d16-924b-5c9e73fd16ad , но я хочу пройти 'countries_id' , возможно ли это вообще?

Это моя функция продаж в модели продуктов:

 public function sales()
    {
        return $this->hasMany(OrderModel::class, 'product_id', 'product_id');
    }
 

Мне просто нужно сказать, для какой страны получать заказы.

Есть идеи, как это исправить?

Комментарии:

1. Я сомневаюсь, что это возможно для самого отношения, так как вы получили бы доступ к нему без скобок, чтобы передать параметр country. Но на верхнем уровне вашего запроса вы можете сказать with('userCountries.sales', function() { ... } . Там может быть реализовано с scope