У меня есть задача добавить помеченные элементы пользователю. Элементы могут быть (Образец, Публикация, Сообщение, в 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');
}
}