Eloquent - Polymorphic, пользователь / команда morphMany Продукты и статьи - PullRequest
0 голосов
/ 12 декабря 2018

Я пытаюсь определить наиболее подходящие отношения между моими моделями.У меня есть модели 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, но я не уверен, что правильно использую полиморфные отношения?Кроме того, я бы предпочел использовать модель владельца со ссылкой на пользователя / команду / аналитика, но для этого требуется дополнительная таблица, что еще больше усложняет ее для меня.Любые рекомендации?

...