两边的laravel多态关系
Posted
技术标签:
【中文标题】两边的laravel多态关系【英文标题】:laravel polymorphic relationships on both sides 【发布时间】:2020-05-23 03:08:24 【问题描述】:我有 2 个模型(代理和客户)和两种位置类型:州和城市。我希望能够为代理商和客户设置位置(任何州或城市)。
┌──────────────┐ ┌──────────────┐ ┌───────────┐ ┌───────────┐
│ agencies │ │ clients │ │ states │ │ cities │
├──────────────┤ ├──────────────┤ ├───────────┤ ├───────────┤
│ id │ │ id │ │ id │ │ id │
│ name │ │ ... │ │ name │ │ name │
│ location... │ │ location... │ │ acronym │ │ state_id │
└──────────────┘ └──────────────┘ └───────────┘ └───────────┘
我考虑过从代理商和客户那里进行多态性(两个表都有 location_id
和 location_type
列)并且它有效,但我想知道是否有任何其他更智能和更清洁的方法来做到这一点(记住城市属于州,所以如果$model
选择的位置是一个城市,我应该可以做$model->location->state
)。
【问题讨论】:
【参考方案1】:我认为没有。最好的方法是创建一个包含以下字段的 location
表:
+-------------+-------------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-------------------------+------+-----+---------+----------------+
| type | enum('city','state') | NO | | NULL | |
| parent_type | enum('agency','client') | NO | | NULL | |
| id | int(11) | NO | PRI | NULL | auto_increment |
| parent_id | int(11) | NO | | NULL | |
+-------------+-------------------------+------+-----+---------+----------------+
然后您将在此表中插入记录以关联它们。
然后您的$model->location->state
将根据parent_type
和parent_id
获取city
或state
。
【讨论】:
以上是关于两边的laravel多态关系的主要内容,如果未能解决你的问题,请参考以下文章