【发布时间】:2021-01-27 21:55:54
【问题描述】:
您好,我有以下关系设置:
产品类别:
public function attributes()
{
return $this->hasMany(ProductAttribute::class);
}
ProductAttribute 类:
public function attribute()
{
return $this->belongsTo(Attribute::class);
}
public function values()
{
return $this->hasMany(ProductAttributeValue::class, 'product_attribute_id');
}
ProductAttributeValue 类:
public function attributeValue()
{
return $this->belongsTo(AttributeValue::class, 'attribute_value_id');
}
如何检查Product 是否有values,ID 为5 和15?
我正在尝试进行这样的查询:
Product::whereHas('values', function($q) use ($product_values_ids) {
$q->whereIn('attribute_value_id', $product_values_ids);
})->get();
但是它不起作用。我无法直接访问$product->values。
关于如何从Product 直接访问属性值有什么建议吗?
更新:
我刚刚设法使它与多对多槽关系一起工作:
产品类别:
public function values()
{
return $this->hasManyThrough(ProductAttributeValue::class, ProductAttribute::class);
}
有没有办法只获取包含$product_values_ids 数组中列出的所有 id 的结果?
【问题讨论】:
-
您正在检查是否存在任何具有这些 id 值的产品,或者您希望这些记录符合该条件?产品没有
values关系 -
我想获取所有具有
$product_values_ids数组值的产品。 -
你试过嵌套的
whereHasProduct::whereHas('attributes.values', ...)->get();吗?
标签: laravel many-to-many laravel-8