Php 使用hasMany关系时如何从post表中获取用户
我对Laravel很陌生,而且我已经被这个问题困扰了很长一段时间,当我试图使用hasMany关系通过post表获取用户名时,我遇到了一个问题。希望添加的代码有助于更好地理解问题。多谢各位Php 使用hasMany关系时如何从post表中获取用户,php,laravel,Php,Laravel,我对Laravel很陌生,而且我已经被这个问题困扰了很长一段时间,当我试图使用hasMany关系通过post表获取用户名时,我遇到了一个问题。希望添加的代码有助于更好地理解问题。多谢各位 public function main_page(){ $post= Post::all(); return view('main' , compact('post') ); } 我希望文章的作者姓名会显示出来,但事实并非如此。我得到一个错误: Tr
public function main_page(){
$post= Post::all();
return view('main' , compact('post') );
}
我希望文章的作者姓名会显示出来,但事实并非如此。我得到一个错误:
Trying to get property 'name' of non-object
我的posts表如下所示:
id
user_id
title
content
created_at
updated_at
你很接近
{{ $p->users->name }}
如果不想向关系中添加子句,则可以将其视为属性来访问
我建议将您的
users()
方法重命名为user()
,因为与的belongsTo
关系将只返回单个模型。如果这样做,则需要将刀片文件中的代码更改为$p->user->name
如果在Post模型中没有返回关系中的用户,请尝试以下操作:
public function user(){
return $this->belongsTo('App\User');
}
函数名应为user
,单数形式,如@Ross Wilson所建议
在您看来,您可以这样做:
@section('content')
@foreach ($post as $p)
{{$p->user->name }}
@endforeach
@endsection
试试叶片视图
@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');
}
我不知道拉威尔,但我可以告诉你,
@foreach($p)显然没有产生你所期望的结果。在某些地方,$p
必须初始化为对象。它显然没有被初始化,因为错误消息告诉您,$p
不是一个对象。一旦我写入{{$p->users->name},我会收到另一个错误,说明:App\Post::users必须返回一个关系实例。
public function main_page(){
$post= Post::with('user')->latest()->get();
return view('main' , compact('post') );
}
public function user(){
$this->belongsTo('App\User');
}