laravel - Laravel 5 同一张表上的多个关系类型
问题描述
我有两个模型:User
&Address
在Address
中,有一个type
属性,它是一个 Enum 列,可以设置为SHIPPING
或BILLING
。
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);
解决方案
您可以在User
模型中定义两个函数:
function createBilling($address) {
$this->billingAddr()->create(['address' => $address, 'type' => 'BILLING']);
}
function createShipping($address) {
$this->shippingAddr()->create(['address' => $address, 'type' => 'SHIPPING']);
}
推荐阅读
- android - 仅在发布版本中在 android 中获取 Parcelable 错误
- java - 在 excel 中更改其他单元格值时更改单元格值 [通过 Apache POI 进行数据验证]
- python - 仅保存 Python 程序中最后一个对象的对象列表
- regex - 如何在VScode中选择所有打印语句
- node.js - 为什么我的选择语句在工作更新语句之后返回旧数据?
- c# - 使用 ajax jquery 将部分视图加载到特定页面的最佳方法是什么?
- javascript - 覆盖JS中现有键的值
- r - 如何在 R 中获得印度城市的纬度?
- angular - Angular:如何管理无效的网址
- ios - 如何获取捕获的最新视频?