Laravel: одно отношение, несколько моделей

У меня есть модель «Пользователь», и у каждого пользователя есть «Сообщения». Теперь есть разные типы постов, такие как «TextPost», «VideoPost» и т. Д.

Я хочу получить все сообщения пользователя, как это:

$user->posts()->get()

Это должно вернуть массив объектов с правильным классом, например, массив как это:

[App\VideoPost{}, App\TextPost{}]

Я пытался использовать полиморфные отношения, как описано в документации, но это не работает. Есть идеи?

0

Решение

В Laravel нет конкретного типа отношений для вашего конкретного случая использования. В этом случае проще всего создать отдельное отношение hasMany для каждого типа сообщений, а затем написать функцию, которая возвращает комбинацию всех результатов.

Таким образом, вы получите что-то подобное в своем классе User:

public function videoPosts()
{
return $this->hasMany(App\VideoPost::class);
}

public function textPosts()
{
return $this->hasMany(App\TextPost::class);
}

public function getPosts()
{
return $this->textPosts->concat($this->videoPosts);
}

Затем вы можете просто продолжать создавать цепочки вызовов для всех типов сообщений, которые вы можете добавить.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector