我对Laravel还是很陌生,现在已经困扰了我好一段时间了,在尝试使用hasMany关系通过帖子表获取用户名时,我遇到了问题。希望添加的代码有助于更好地理解问题。谢谢
public function main_page(){
$post= Post::all();
return view('main' , compact('post') );
}
@extends('layouts.app')
@section('content')
@foreach ($post as $p)
{{$p->users()->name }}
@endforeach
@endsection
public function users(){
$this->belongsTo('App\User');
}
我希望显示该帖子的作者姓名,但实际情况并非如此。我收到错误消息:
Trying to get property 'name' of non-object
我的帖子表如下:
id
user_id
title
content
created_at
updated_at
答案 0 :(得分:1)
你很近。
{{ $p->users->name }}
如果您不想在关系中添加子句,则可以将其视为属性来访问它。
我建议将您的users()
方法重命名为user()
,因为它与belongsTo
的关系只会返回一个模型。如果这样做,则需要将刀片文件中的代码更改为$p->user->name
。
答案 1 :(得分:0)
您不会在您的 Post 模型中以关系形式返回用户,请尝试以下操作:
public function user(){
return $this->belongsTo('App\User');
}
函数的名称应为user
,如@Ross Wilson所建议的单数形式。
您认为您可以这样做:
@section('content')
@foreach ($post as $p)
{{$p->user->name }}
@endforeach
@endsection
答案 2 :(得分:0)
尝试
刀片视图
@foreach ($post as $p)
{{$p->user->name }}
@endforeach
控制器
public function main_page(){
$post= Post::with('user')->latest()->get();
return view('main' , compact('post') );
}
模型post
public function user(){
$this->belongsTo('App\User');
}