使用hasMany关系时如何从帖子表中获取用户

时间:2019-03-23 22:58:42

标签: php laravel

我对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

3 个答案:

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