我有一个名为 Journey 的父模型,它应该与模型类型地址的两个实例相关 - 一次用于' origin'和一次目的地'。我无法找出最有效的方法。当我回到旅途中时,我想用Laravel的Eloquent ORM和渴望加载来实现如下的优雅:
return Journey::with('origin','destination');
我尝试过以下方法:
1)使用Eloquent ORM' s one to one relationships
Journey
-------
id
user_id
date
Address
-------
id
journey_id
street
city
zipcode
观察:
2)使用Eloquent ORM' s polymorphic relationships
Journey
-------
id
user_id
date
Address
-------
id
street
city
zipcode
addressable_id
addressable_type
观察:
3)关联' journey.origin'或者' journey.destination'将其加入' address.id'
Journey
-------
id
user_id
origin (address.id)
destination (address.id)
date
Address
-------
id
street
city
zipcode
观察:
有没有人对表格/关系结构有任何建议,使得旅程(原点和目的地)插入和选择尽可能优雅,最好使用Eloquent以便我可以利用我的模型属性和功能?
此外,虽然通过旅程模型访问地址将是主要用例,但我也希望能够通过地址模型访问父旅程。
答案 0 :(得分:1)
你应该拥有的是:
数据库结构
Journey
---------
id
origin_id
destionation_id
user_id
date
Address
---------
id
street
city
zipcode
然后,使用One-to-Many关系将Journey
模型与Address
相关联:
<强> Journey.php 强>
class Journey extends Model {
// ...
public function origin() {
return $this->belongsTo('Address');
}
public function destination() {
return $this->belongsTo('Address');
}
}
<强> Address.php 强>
class Address extends Model {
// ...
public function journeysAsOrigin() {
return $this->hasMany('Journey', 'origin_id');
}
public function journeysAsDestination() {
return $this->hasMany('Journey', 'destination_id');
}
}