【发布时间】:2013-11-06 15:20:30
【问题描述】:
我有一个名为 Journey 的父模型,它应该与模型类型 Address 的两个实例相关 - 一次用于“起点”,一次用于“目的地”。我不知道什么是最有效的方法。当我返回旅程时,我想使用 Laravel 的 Eloquent ORM 和渴望加载来实现如下优雅的东西:
return Journey::with('origin','destination');
我尝试了以下方法:
1) 使用 Eloquent ORM 的 one to one relationships
Journey
-------
id
user_id
date
Address
-------
id
journey_id
street
city
zipcode
观察:
- 在 Address 模型中需要“journey_id”,这意味着除了 Journeys 之外,我无法真正将此模型重新用于其他任何事情
- 地址与整个旅程相关联,因此我无法区分起点和终点实例
2) 使用 Eloquent ORM 的 polymorphic relationships
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。
【问题讨论】:
-
您会有多个
Journey与相同的destionation或origin吗? -
这是最终目标。但现在我可以忍受重复的地址,如果这样更容易的话。