首页 > 解决方案 > 嵌套的 Eloquent 关系 - HasOneThrough 问题

问题描述

我有以下表格设置:

Product_variant桌子

Product_variant -> id, name, code, image

Warehouse桌子

Warehouse -> id, name, address

Product Variant Stock桌子

Product_Variant_stock -> stock_id, warehouse_id, variant_id, stock_qty

现在,当我尝试访问产品变体信息时,我需要获取有关变体存储在哪个仓库中的信息。

我在ProductVariation模型中尝试过的内容:

public function warehouseName()
{
    return $this->hasOneThrough(Warehouse::class, ProductVariantStock::class, 'warehouse_id', 'id');
}

上面没有按预期工作。任何帮助表示赞赏。

标签: eloquentlaravel-7eloquent-relationship

解决方案


laravel hasOneThrough 像这样工作

class ModelA extends Model
{
    ...
    
    public function cModel()
    {
        return $this->hasOneThrough(
            ModelC::class,
            ModelB::class,
            'model_a_id', // Key on B that relates to A
            'model_c_id', // Key on C that relates to B
            'a_id',       // Key on A that relates to B
            'b_id',       // Key on B that relates to C
        );
    }
}

所以你的代码将是

public function warehouseName()
{
    return $this->hasOneThrough(Warehouse::class, ProductVariantStock::class, 'variant_id', 'id', 'id', 'warehouse_id');
}

推荐阅读