laravel - Eloquent - 检查远程关系上是否存在 id
问题描述
我需要检查与产品的远距离关系中是否存在国家 ID。我只需要一个真或假作为结果。我还没有弄清楚如何提出查询。每个模型中定义了不同的关系:
产品 - 属于ToMany ShippingProfile
ShippingProfile - hasMany 方法
方法 - 属于 ShippingZone
ShippingZone - 属于ToMany国家
因此,如果我有产品 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()
(尽管在 shippingProfiles 中正确定义了methods())。
编辑2:
使用“with”,我可以对国家/地区进行“位置”检查,但如果我提供一个不存在的国家/地区,它不会失败 - 它只会返回带有属性的产品和一个带有空国家/地区数组的区域:
return $prod = \App\Product::find(2)->with([
'shipping_profiles.methods.zone.countries' => function($query) {
$query->where('countries.id', 10000);
}])->firstOrFail();
因此,如果您可以建议任何其他返回 true/false 或返回 zone 或 null 的方法,这就是我正在寻找的......
解决方案
使用whereHas()
:
return $prod = \App\Product::whereKey(2)->whereHas(
'shipping_profiles.methods.zone.countries', function($query) {
$query->where('countries.id', 10000);
})->firstOrFail();
推荐阅读
- c# - 如何在 Linq 查询中将 where 条件放入 select 条件中
- javascript - 我无法在搜索页面中获取特定 URL
- c# - 如何将按钮放在选项卡旁边?
- bash - 使用 < 时如何隐藏文本输出
我使用 Vagrant 和自己编写的脚本来配置它。我的脚本之一包含以下代码:
mysql_secure_installation <<EOF y secret secret y y y y EOF
一切正常,但我想关闭到
vagrant up
日志- vb.net - 在 UWP 应用程序上首次尝试 SQlConnection.open 方法比桌面应用程序花费更长的时间
- node.js - Angular 6 API 中的异步调用
- matplotlib - 是否可以使用简单的符号创建定时值的 matplotlib 条形图?
- javascript - D3 图表对齐标题和图表位置
- java - 使用用户位置的运动检测无法正常工作
- matlab - 将数组中的所有元素连续相减