#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