Laravel: коллекция с многомерной ассоциацией

#php #laravel #relationship

#php #laravel #взаимосвязь

Вопрос:

Модель User :

 public function posts()
{
    return $this->hasMany('AppModelsPost');
}
  

Модель Post :

 public function tags()
{
    return $this->hasMany('AppModelsTag');
}
  

В Controller :

 $user = User::with('posts')->get($id);
  

Моя коллекция должна содержать user > posts > tags amp; я понятия не имею, как я могу включить tags внутренний posts объект в user коллекцию.

Комментарии:

1. Если вы пытаетесь предварительно загрузить все теги в сообщениях, вы можете изменить with на with([‘posts’,’posts.tags’]);

Ответ №1:

Вы хотите получить все пользовательские теги через сообщения?

В этом случае вы можете использовать отношение hasManyThrough

 users
    id - integer
    name - string

posts
    id - integer
    user_id - integer
    name - string

tags
    id - integer
    post_id - integer
    title - string
  

Затем в пользовательской модели

 class User extends Model
{
    /**
     * Get all of the tags for the user.
     */
    public function tags()
    {
        return $this->hasManyThrough(Tag::class, Post::class);
    }
}
  

Затем вы можете получить свои пользовательские теги с помощью этого

 $user->tags;
  

Вы можете ознакомиться с полной документацией здесь:

https://laravel.com/docs/8.x/eloquent-relationships#has-many-through

Ответ №2:

Я думаю, вы можете использовать полиморфный. Вот официальный документ:

https://laravel.com/docs/8.x/eloquent-relationships#has-one-through

Я не совсем уверен, что вы можете использовать этот запрос.

 with('posts.tags');