Laravel 检查 hasMany of hasMany 关系是否有 ID?

时间:2021-01-27 12:33:31

标签: laravel many-to-many laravel-8

您好,我有以下关系设置:

产品类别:

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 为 515

我正在尝试进行这样的查询:

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 数组中的结果?

1 个答案:

答案 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();
相关问题