我有一个名为Journey的父模型,它应该与模型类型地址的两个实例相关- 一次用于“起点”,一次用于“目的地”。我不知道什么是最有效的方法。当我返回旅程时,我想使用 Laravel 的 Eloquent ORM 和渴望加载来实现如下优雅的东西:
return Journey::with('origin','destination');
我尝试了以下方法:
1) 使用 Eloquent ORM 的一对一关系
Journey
-------
id
user_id
date
Address
-------
id
journey_id
street
city
zipcode
观察:
- 在 Address 模型中需要“journey_id”,这意味着除了 Journeys 之外,我无法真正重用此模型
- 地址与整个旅程相关联,因此我无法区分起点和终点实例
2) 使用 Eloquent ORM 的多态关系
Journey
-------
id
user_id
date
Address
-------
id
street
city
zipcode
addressable_id
addressable_type
观察:
- 我现在可以将 Address 模型与其他模型一起使用,但是...
- 地址仍然与整个旅程相关联,因此我无法区分起点和终点实例
3)通过将'journey.origin'或'journey.destination'加入'address.id'来关联它
Journey
-------
id
user_id
origin (address.id)
destination (address.id)
date
Address
-------
id
street
city
zipcode
观察:
- 我现在可以区分源实例和目标实例,但是......
- 我想我必须对连接使用流畅的查询,所以我不会将起点和终点作为地址模型
- 没有从地址返回到旅程的链接
有没有人对表/关系结构有任何建议,使旅程(与起点和目的地)插入和选择尽可能优雅,最好使用 Eloquent,以便我可以利用我的模型属性和功能?
此外,虽然通过 Journey 模型访问地址将是主要用例,但我也希望能够通过 Address 模型访问父 Journey。