Мне нужно проверить, существует ли идентификатор страны в отдаленном отношении к продукту.Мне нужен только истинный или ложный результат.Я не понял, как поставить запрос.Различные соотношения определены в каждой модели:
Продукт - принадлежит toMany ShippingProfile
ShippingProfile - hasMany Methods
Метод - принадлежит To ShippingZone
ShippingZone - принадлежит ToMany Страны
Итак, если у меня есть идентификатор продукта 2 и идентификатор страны 5, я хочу узнать, доступен ли идентификатор страны в какой-либо зоне в рамках любого из методов, относящихся к профилю продукта.(на самом деле это только один профиль для каждого продукта, но он определен как ownToMany с сводной таблицей).
Я попытался получить доступ к странам в качестве первого шага, но я не могу получить доступ к нему с помощьюэтот синтаксис:
$prod = \App\Product::find(2)
->shipping_profiles()
->methods()->zones()->countries();
Я получаю сообщение об ошибке: "Call to undefined method Illuminate\\Database\\Query\\Builder::methods()
(хотя методы () правильно определены в shippingProfiles).
Edit2 :
Используя «с», я могу выполнить проверку «где» для стран, но если я предоставлю несуществующую страну, это не даст сбоя - он просто вернет продукт со свойствами изона с пустым массивом стран:
return $prod = \App\Product::find(2)->with([
'shipping_profiles.methods.zone.countries' => function($query) {
$query->where('countries.id', 10000);
}])->firstOrFail();
Так что, если вы можете посоветовать любой другой метод, который вернет либо true / false, либо вернет зону или null, это то, что я ищу ..