返回值必须是 Illuminate\Database\Eloquent\Relations\HasMany 类型,返回 Illuminate\Database\Eloquent\Builder

问题描述 投票:0回答:1

我有一个方法:

public function getAllVariants(): HasMany
{
    return $this->hasMany(ProductVariant::class, 'product_id', 'id')->with(['product', 'attribute_values', 'image', 'description']);
}

我尝试修改它:

public function getAllVariants(): HasMany
{
        $allVariants = $this->hasMany(ProductVariant::class, 'product_id', 'id')->with(['product', 'attribute_values', 'image', 'description']);
    
    if ($allVariants->count() === 0) {
        
       $variantByCode = ProductVariant::where('code', $this->code)->first();

        if (!$variantByCode) {
            
            $variants = $this->hasMany(ProductVariant::class, 'product_id', 'id')->where('id', '=', 0); 
        }

        // Retrieve variants related to the product
        $allVariants = ProductVariant::where('product_id', $variantByCode->product_id)
            ->with(['product', 'attribute_values', 'image', 'description']);
    }

    return $allVariants;
}

需要进行此修改以将产品变体相互连接。为此,我更改了product_id 查询。我开始收到错误:

Blockquote 返回值必须是 Illuminate\Database\Eloquent\Relations\HasMany 类型,返回 Illuminate\Database\Eloquent\Builder

我还想指出,将来此代码将用作:

$variants = $this->getAllVariants
       ->each(fn(ProductVariant $variant) => $variant->setRelation('product', $this))
       ->sortBy('position');

如何修复该错误?

php laravel eloquent
1个回答
0
投票

您需要返回 HasMany 和 Builder,因为如果 if 条件为 true,您的函数将返回 Builder。

© www.soinside.com 2019 - 2024. All rights reserved.