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
抓取城市或州