我有一个方法:
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');
如何修复该错误?
您需要返回 HasMany 和 Builder,因为如果 if 条件为 true,您的函数将返回 Builder。