首页 > 解决方案 > Laravel 5 同一张表上的多个关系类型

问题描述

我有两个模型:User&Address

Address中,有一个type属性,它是一个 Enum 列,可以设置为SHIPPINGBILLING

User可以有一个Address类型SHIPPING和一个BILLING类型。

关系如下:

public function billingAddr()
{
    return $this->hasOne('App\Models\Address')->where('type', Address::TYPE_BILLING);
}

public function shippingAddr()
{
    return $this->hasOne('App\Models\Address')->where('type', Address::TYPE_SHIPPING);
}

如果我正在检索数据,它工作正常:

$billingAddress = $user->billingAddr;

但是如果我正在创建一个新的关系,我仍然需要手动插入类型,有什么方法可以通过关系创建并且该字段将自动填充?

例如:

// Record should be created with type auto set to BILLING
$user->billingAddr()->create($values);

// Record should be created with type auto set to SHIPPING
$user->shippingAddr()->create($values);

标签: laravelrelationshiplaravel-5.6

解决方案


您可以在User模型中定义两个函数:

function createBilling($address) {
    $this->billingAddr()->create(['address' => $address, 'type' => 'BILLING']);
}

function createShipping($address) {
    $this->shippingAddr()->create(['address' => $address, 'type' => 'SHIPPING']);
}

推荐阅读