Laravel 检查 hasMany 的 hasMany 关系是否有 ID?
Laravel check hasMany of hasMany relationship if has IDs?
您好,我有以下关系设置:
产品class:
public function attributes()
{
return $this->hasMany(ProductAttribute::class);
}
ProductAttribute class:
public function attribute()
{
return $this->belongsTo(Attribute::class);
}
public function values()
{
return $this->hasMany(ProductAttributeValue::class, 'product_attribute_id');
}
ProductAttributeValue class:
public function attributeValue()
{
return $this->belongsTo(AttributeValue::class, 'attribute_value_id');
}
如何检查 Product
是否具有 ID 为 5
和 15
的 values
?
我正在尝试进行这样的查询:
Product::whereHas('values', function($q) use ($product_values_ids) {
$q->whereIn('attribute_value_id', $product_values_ids);
})->get();
但是它不起作用。我无法直接访问 $product->values
.
关于如何从 Product
直接访问属性值的任何建议?
更新:
我刚刚设法让它与多对多的槽关系一起工作:
产品class:
public function values()
{
return $this->hasManyThrough(ProductAttributeValue::class, ProductAttribute::class);
}
有没有办法只获取 $product_values_ids
数组中列出的所有 ID 的结果?
您必须添加与产品模型的新关系:
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();
您好,我有以下关系设置:
产品class:
public function attributes()
{
return $this->hasMany(ProductAttribute::class);
}
ProductAttribute class:
public function attribute()
{
return $this->belongsTo(Attribute::class);
}
public function values()
{
return $this->hasMany(ProductAttributeValue::class, 'product_attribute_id');
}
ProductAttributeValue class:
public function attributeValue()
{
return $this->belongsTo(AttributeValue::class, 'attribute_value_id');
}
如何检查 Product
是否具有 ID 为 5
和 15
的 values
?
我正在尝试进行这样的查询:
Product::whereHas('values', function($q) use ($product_values_ids) {
$q->whereIn('attribute_value_id', $product_values_ids);
})->get();
但是它不起作用。我无法直接访问 $product->values
.
关于如何从 Product
直接访问属性值的任何建议?
更新:
我刚刚设法让它与多对多的槽关系一起工作:
产品class:
public function values()
{
return $this->hasManyThrough(ProductAttributeValue::class, ProductAttribute::class);
}
有没有办法只获取 $product_values_ids
数组中列出的所有 ID 的结果?
您必须添加与产品模型的新关系:
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();