Красноречивый принадлежит ToMany на основе типа - PullRequest
0 голосов
/ 05 мая 2018

Я столкнулся с некоторой проблемой, которую не могу решить с помощью Eloquent Laravel.

У меня есть два или более (6 - точно) объектов: - ObjectA - ObjectB - ObjectC Каждый из этих объектов имеет один собственный вариант, но структура вариантов одинакова для каждого объекта, поэтому может быть общей. Variant имеет поданный вариант_типа, который указывает, к какому типу объекта принадлежит. Как основать отношения на этом поле?

class Variant extends Model
{
    protected $fillable = ['variant_id','name','variant_type','variant_img'];

    public function ObjectsA()
    {
        return $this->belongsToMany(ObjectA::class);
    }
    public function ObjectsB()
    {
        return $this->belongsToMany(ObjectB::class);
    }
    .
    .
    .
}

В моделях объектов у меня есть отношение hasOne для Variant :: class. Я думал о создании сводных таблиц для каждого примера Object: objectA_variant, objectB_variant и т. Д., Но это не главное, потому что Object имеет один вариант. Кроме того, я думал о создании пустых столбцов для внешних ключей (6 столбцов), но я не уверен, что это хороший способ?

Пожалуйста, совет и спасибо заранее.

1 Ответ

0 голосов
/ 05 мая 2018

У вас должны быть только класс Variant и Object. Тогда отношения:

Объект -> Вариант hasMany

Variant-> hasOne Object

И помните, что в ваших таблицах должны быть правильные имена столбцов, как, например, variable_id вместо variable_type.

В противном случае вам нужно будет вручную добавить ссылочные ключи к определению ваших отношений

...