Laravel Eloquent для получения родительских, дочерних записей и дочерних записей

У меня есть эти модели со следующими полями, заключенными в скобки. У пользователя может быть много сообщений, а у сообщений может быть много категорий. Как мы можем добиться их с помощью laravel eloquent.

User   [id, name]
Post   [id, user_id, post_title]
PostType [id,post_id, category_desc]

В модели пользователя

public function posts(){
    return $this->hasmany('App\Post');
}

В модели Post

public function categories(){
   return $this->hasmany('App\PostType');
}

В контроллере

$result = User::with('post')->get();

который вернет пользователей, причем каждый пользователь будет иметь записи о публикации. Но как добавить категории в набор результатов?

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
0
1 188
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете включить удаленные отношения с помощью точечной записи:

$result = User::with(['post', 'post.categories'])->get();

Спасибо, Девон, протестировано и работает как положено. Ты гуру.

Kruze 18.09.2018 02:45

Альтернативным решением, особенно если вы хотите приносить сообщения и категории сообщений каждый раз, когда вы захватываете пользователя, было бы использование массива $ appends в модели User и Post, чтобы автоматически извлекать эти отношения с каждым запросом. Например, ваша модель Post будет включать это вверху:

class Post extends Model
{
    $appends = array('categories');
...

И ваша модель User будет выглядеть примерно так:

class User extends Authenticatable
{
    $appends = array('posts');
...

Это будет автоматически включать эти категории вместе с сообщениями каждый раз, когда вы добавляете объект User.

Спасибо за альтернативное решение eResourcesInc. Примем к сведению и это.

Kruze 18.09.2018 04:22

Другие вопросы по теме