Database 两侧的laravel多态关系

Database 两侧的laravel多态关系,database,laravel,polymorphism,relationship,polymorphic-associations,Database,Laravel,Polymorphism,Relationship,Polymorphic Associations,我有两个模型(代理和客户)和两个位置类型:州和城市。我想为代理和客户设置一个位置(任何州或城市) ┌──────────────┐ ┌──────────────┐ ┌───────────┐ ┌───────────┐ │ agencies │ │ clients │ │ states │ │ cities │ ├──────────────┤ ├──────────────┤ ├───────────┤ ├───────────┤

我有两个模型(代理和客户)和两个位置类型:州和城市。我想为代理和客户设置一个位置(任何州或城市)

┌──────────────┐  ┌──────────────┐    ┌───────────┐  ┌───────────┐
│ agencies     │  │ clients      │    │ states    │  │ cities    │
├──────────────┤  ├──────────────┤    ├───────────┤  ├───────────┤
│ id           │  │ id           │    │ id        │  │ id        │
│ name         │  │ ...          │    │ name      │  │ name      │
│ location...  │  │ location...  │    │ acronym   │  │ state_id  │
└──────────────┘  └──────────────┘    └───────────┘  └───────────┘

我曾考虑过从代理机构和客户处创建多态性(两个表都有
location\u id
location\u type
)并且它是有效的,但我想知道是否有其他更聪明、更干净的方法来实现这一点(请记住,城市属于州,因此如果为
$model
选择的位置是城市,我应该能够执行
$model->location->state

我认为没有。最好的方法是创建一个包含以下字段的
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
会根据
父项类型和
父项id来抓取
城市
,我认为没有。最好的方法是创建一个
位置
表,其中包含以下字段:

+-------------+-------------------------+------+-----+---------+----------------+
| 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
将根据
父项类型和
父项id
抓取
城市或