laravel polymorphi c отношения с обеих сторон - PullRequest
1 голос
/ 07 февраля 2020

У меня есть 2 модели (Агентство и Клиент) и два типа местоположения: Штат и Город. Я хочу сделать возможным установить местоположение (любой из штатов ИЛИ городов) для агентств и клиентов.

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

Я думал о том, чтобы сделать полиморфизм из агентств и клиентов (обе таблицы будут иметь столбцы location_id и location_type), и это работает, но я хочу знать, есть ли какой-нибудь другой более умный и чистый способ сделать это (помня, что города принадлежат государствам, поэтому я смогу сделать $model->location->state, если выбранное место для $model это город).

1 Ответ

0 голосов
/ 07 февраля 2020

Я не думаю, что есть. Лучший способ сделать это - иметь таблицу 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 будет затем захватывать city или state в зависимости от parent_type и parent_id.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...