Php 使用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

我对Laravel很陌生,而且我已经被这个问题困扰了很长一段时间,当我试图使用hasMany关系通过post表获取用户名时,我遇到了一个问题。希望添加的代码有助于更好地理解问题。多谢各位

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