Я пытаюсь определить наиболее подходящие отношения между моими моделями.У меня есть модели Product и Article, обе из которых могут принадлежать пользователю, команде или аналитику.Есть много пользователей, команд и аналитиков, и у каждого из них может быть много продуктов или статей.Моя текущая настройка выглядит следующим образом:
Product
id
owner_type
owner_id
Articles
id
owner_type
owner_id
Team
id
name
User
id
name
Analyst
id
name
Классы:
class Product {
public function owner() {
return $this->morphTo();
}
}
class Article {
public function owner() {
return $this->morphTo();
}
}
class Team {
public function articles() {
return $this->morphMany('App\Models\Article', 'owner');
}
public function products() {
return $this->morphMany('App\Models\Product', 'owner');
}
}
class User {
public function articles() {
return $this->morphMany('App\Models\Article', 'owner');
}
public function products() {
return $this->morphMany('App\Models\Product', 'owner');
}
}
Таблица артикулов:
+----+----------+------------+----------+
| id | name | owner_type | owner_id |
+----+----------+------------+----------+
| 1 | articleA | team | 13 |
| 2 | articleB | team | 4 |
| 3 | articlec | user | 1 |
+----+----------+------------+----------+
Таблица продукции:
+----+-------+------------+----------+
| id | name | owner_type | owner_id |
+----+-------+------------+----------+
| 1 | prd | team | 13 |
| 2 | prd-2 | user | 4 |
+----+-------+------------+----------+
Это работает, и я могу, например, получить владельца статьи просто Article::find(1)->owner()->get()
, что в моем случае вернет Team # 13, но я не уверен, что правильно использую полиморфные отношения?Кроме того, я бы предпочел использовать модель владельца со ссылкой на пользователя / команду / аналитика, но для этого требуется дополнительная таблица, что еще больше усложняет ее для меня.Любые рекомендации?