两边的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_idlocation_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_typeparent_id 获取citystate

【讨论】:

以上是关于两边的laravel多态关系的主要内容,如果未能解决你的问题,请参考以下文章

如何在laravel中获得多态关系?

Laravel - 渴望加载多态关系的相关模型

Laravel 5分离/删除多态关系

Laravel-多对一多态关系

Laravel - 反向多态关系

Laravel 一对多(多态)关系