Laravel 5.2试图获得非对象的属性

时间:2017-08-07 21:19:28

标签: php laravel laravel-5.2

我正在按照教程在laravel 5.2上制作博客项目,我试图从其他表(用户表)中显示用户名。 post属性在视图中成功显示,但是当我尝试从use table访问属性时,我尝试获取非对象的属性。

以下是我的观点:

 <div class="blog-post">
            <h2 class="blog-post-title">
            <a href="/posts/{{$post->id}}">
            {{ $post->title }}
            </a>
            </h2>
            <p class="blog-post-meta">
            {{ $post->user->name }}
            {{ $post->created_at->toFormattedDateString() }}
            </p>

            {{ $post->body }}

          </div><!-- /.blog-post -->

这是我的postscontroller:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Post;
use App\User;

use App\Http\Requests;



class PostsController extends Controller
{
    //
  public function __construct(){
    $this->middleware('auth')->except(['index','show']);
  }

    public function index(){


        $posts = Post::latest()->get();
        return view('posts.index',compact('posts'));
    }

    public function show($id){

        $post = Post::find($id);
        return view('posts.show',compact('post'));
    }

    public function create(){
        return view('posts.create');
    }

   public function store(){
    $this->validate(request(), [
        'title' => 'required',
        'body' => 'required'

        ]);

    Post::create([
      'title' => request('title'),
      'body' => request('body'),
      'user_id' => auth()->id()
      ]);


    // $post = new Post;
    // $post->user_id = auth()->id()
    // $post->title = request('title');
    // $post->body = request('body');


    // $post->save();

    return redirect('/');

   }
}

这是帖子模型:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    //
    protected $fillable = ['title','body','user_id'];

    public function user()
    {
        return $this->belongsTo(User::class);
    }

    public function comments(){
        return $this->hasMany(Comment::class);
    }



}

用户模型:

<?php

namespace App;

use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];

    public function posts(){
        return $this->hasMany(Post::class);
    }
}

2 个答案:

答案 0 :(得分:1)

正如您所说,您在通过user访问post的媒体资源时收到此错误。这意味着您的$post->usernull或不是object,而是array(可能性较小)。

可能性较高的问题是null。你检查过了吗?我希望你在显示用户名时使用{{$post->user->name ?? ''}}(仅在php 7中支持)。这意味着如果未设置$post->user->name则不显示任何内容。

检查$post->user是否为null。如果nullpost,那么问题是,为什么$post->user可以是null?可能的原因是什么?

$post->user为null的可能原因是:

  1. 关系未正确构建。在确定您的关系时,请确保您的posts表格中包含user_id列。
  2. posts表格中,user_id可以为空,因为某个帖子user_id为空。
  3. 该帖子的user_id与不存在的user相关联。这可以限制使用外来约束。

答案 1 :(得分:0)

@Ahmed, 你的模型,视图和控制器看起来很正常。 它应该工作。 请确保在您的数据库中,它具有该列名称?