#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');