У меня есть модель «Пользователь», и у каждого пользователя есть «Сообщения». Теперь есть разные типы постов, такие как «TextPost», «VideoPost» и т. Д.
Я хочу получить все сообщения пользователя, как это:
$user->posts()->get()
Это должно вернуть массив объектов с правильным классом, например, массив как это:
[App\VideoPost{}, App\TextPost{}]
Я пытался использовать полиморфные отношения, как описано в документации, но это не работает. Есть идеи?
В 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);
}
Затем вы можете просто продолжать создавать цепочки вызовов для всех типов сообщений, которые вы можете добавить.
Других решений пока нет …