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

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

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();