У меня есть три модели и отношения. Сообщение, профиль пользователя, пользователь. Мне нужно получить значение столбца имени из таблицы пользователей, но мне нужно просмотреть сообщения и профиль пользователя, чтобы получить его. Сообщения связаны с профилем пользователя, а профиль пользователя связан с пользователями. Я попробовал $post->userProfile()->user()->name, но это не сработает. я получаю сообщение об ошибке
Call to undefined method Illuminate\\Database\\Eloquent\\Relations\\BelongsTo::user()
Вот мой код. Любая помощь приветствуется.
Post.php
в таблице сообщений есть столбец user_profile_id
public function userProfile()
{
return $this->belongsTo(UserProfile::class);
}
Профиль пользователя.php
public function user()
{
return $this->belongsTo(User::class, 'id');
}
public function posts()
{
return $this->hasMany(Post::class);
}
Пользователь.php
public function profile()
{
return $this->hasOne(UserProfile::class, 'id');
}
@Lessmore Отдельный пост.
Что произойдет, если profile()
изменится на userProfile()
в User.php
Не используйте скобки, используйте $post->userProfile->user->name
Вы хотели бы использовать динамические свойства для доступа к фактической разрешенной связи (модели или коллекции), а не к методам связи:
$post->userProfile->user->name
Это предполагает, что эти отношения настроены правильно и существуют в базе данных.
Если вы используете PHP8, вы можете использовать экзистенциальный оператор, чтобы избежать проблемы с возвратом отношений null
и вызовом методов для этого:
$post->userProfile?->user?->name
Пожалуйста, попробуйте это.
// Lets get the post having id 1
$post = Post->find(1);
$post->userProfile->user->name;
Когда вы используете круглые скобки, вы получите сами отношения Eloquent, а не результаты этих отношений.
$post->userProfile();
Если вы хотите получить информацию о профиле пользователя этого сообщения с помощью круглых скобок, используйте этот код.
$post->userProfile()->get(); //or
$post->userProfile()->first();
Что такое
$posts
? Отдельный пост или сборник?