您好,我有以下关系设置:
产品类别:
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);
}
有没有办法只获取所有 id 列在 $product_values_ids
数组中的结果?
答案 0 :(得分:1)
您必须向产品模型添加新关系:
public function values(): HasManyThrough
{
return $this->hasManyThrough(ProductAttributeValue::class, ProductAttribute::class);
}
然后:
$builder = Product::query();
foreach($product_values_ids as $id) {
$builder->whereHas('values', function($q) use ($id) {
$q->where('id', $id);
});
}
$product = $builder->get();