Laravel Eloquent 关系 - 与一个订单模型关联的两个不同的交付地址

Pe-*_*Ter 5 php database laravel eloquent

对于每个订单,我有两个不同的送货地址:

  • 发票地址
  • 邮寄地址

这两个具有相同的字段,所以我只Address为它们创建了一个模型。

楷模:

  • 地址
  • 命令

每个订单包含两个字段:

  • 发票地址
  • 邮寄地址

我希望这些字段中的每一个都指向相同的地址(以防用户希望将货物运送到发票地址)或两个不同的地址(以防交货地址与发票地址不同)。

我将如何为此目的建立关系?

这是我尝试过的:

订单.php

public function orderAddress() {
    return $this->hasOne('App\Address');
}

public function deliveryAddress() {
    return $this->hasOne('App\Address');
}   
Run Code Online (Sandbox Code Playgroud)

地址.php

public function order() {
    return $this->belongsTo('App\Order');
}  
Run Code Online (Sandbox Code Playgroud)

但我似乎无法弄清楚如何为一个订单分配两个不同的地址。

我考虑过使用这种hasMany()关系,但是如果不指定Address模型中的类型,就很难分辨哪个地址是哪个。

Ale*_*nin 3

1、模型中Order

public function orderAddress()
{
    return $this->hasOne('App\Address', 'invoice_address');
}

public function deliveryAddress()
{
    return $this->hasOne('App\Address', 'delivery_address');
}
Run Code Online (Sandbox Code Playgroud)

在模型中Address

public function orderForInvoiceAddress()
{
    return $this->belongsTo('App\Order', 'invoice_address');
}

public function orderForDeliveryddress()
{
    return $this->belongsTo('App\Order', 'delivery_address');
}
Run Code Online (Sandbox Code Playgroud)

2.但我认为处理此问题的更好方法是使用一个标准外键order_id并添加type列:

public function orderAddress()
{
    return $this->hasOne('App\Address')->where('type', 1);
}

public function deliveryAddress()
{
    return $this->hasOne('App\Address')->where('type', 2);
}
Run Code Online (Sandbox Code Playgroud)

并在Address模型中:

public function order()
{
    return $this->belongsTo('App\Order');
}
Run Code Online (Sandbox Code Playgroud)