Laravel превращается ЛЮБАЯ модель в модель пользователя - PullRequest
0 голосов
/ 10 февраля 2020

У меня есть задача добавить помеченные элементы пользователю. Элементы могут быть (Образец, Публикация, Сообщение, в c ..). Все модели Eloquent имеют собственную таблицу, такую ​​как samples, publications, messages с первичным ключом id.

Я хочу связать эти модели с пользователем как помеченные элементы через одну таблицу (user_starrable). Структура этой таблицы может выглядеть примерно так:

id - integer
user_id - integer

model_id - integer (value like 1)
model_type - string (value like \App\Models\Sample)

Я пытаюсь сделать это несколько дней через морф-связь, но безуспешно. Я не могу написать правильные методы на моделях для достижения этой работы. В конце мне нужно запросить все модели в одной коллекции по коду, подобному $user->starrables()->get(), и там я хочу собрать все модели вместе (образцы, публикации и сообщения, если отношения существуют). Спасибо!

Модели:

Пользователь. php

class User
{
    protected $table = 'users';

    protected $hidden = [
        'password', 'remember_token',
    ];


    public function starred() { // that i cant write
        return $this->morphTo();
    }
}

Образец. php

class Sample
{
    protected $table = 'samples';

    public function starrable() {
        return $this->morphOne(User::class, 'starred');
    }
}

Публикация. php

class Publication
{
    protected $table = 'publications';

    public function starrable() {
        return $this->morphOne(User::class, 'starred');
    }
}

Сообщение. php

class Message
{
    protected $table = 'messages';

    public function starrable() {
        return $this->morphOne(User::class, 'starred');
    }
}
...