我需要检查与产品的远距离关系中是否存在国家/地区ID。结果只需要是对还是错。我还没有弄清楚如何进行查询。每个模型中定义了不同的关系:
产品-属于到很多运输资料
ShippingProfile-有很多方法
方法-属于ShippingZone
ShippingZone-属于许多国家/地区
因此,如果我有产品ID 2和国家/地区ID 5,我想确定该国家/地区ID在属于该产品资料的任何方法中的任何区域中是否可用。 (实际上,每个产品只有一个配置文件,但它定义为带有数据透视表的belongsToMany)。
第一步,我尝试访问国家/地区,但使用以下语法无法访问它:
$prod = \App\Product::find(2)
->shipping_profiles()
->methods()->zones()->countries();
我收到错误消息:“ Call to undefined method Illuminate\\Database\\Query\\Builder::methods()
(尽管methods()在shippingProfiles中已正确定义)。
Edit2 :
使用“ with”,我可以对国家/地区进行“ where”检查,但是如果我提供的国家/地区不存在,它不会失败-它只会返回带有属性的产品和带有空国家的区域数组:
return $prod = \App\Product::find(2)->with([
'shipping_profiles.methods.zone.countries' => function($query) {
$query->where('countries.id', 10000);
}])->firstOrFail();
因此,如果您可以建议其他任何将返回true / false或返回zone或null的方法,那就是我想要的。
答案 0 :(得分:1)
使用whereHas()
:
return $prod = \App\Product::whereKey(2)->whereHas(
'shipping_profiles.methods.zone.countries', function($query) {
$query->where('countries.id', 10000);
})->firstOrFail();