我正在按照教程在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);
}
}
答案 0 :(得分:1)
正如您所说,您在通过user
访问post
的媒体资源时收到此错误。这意味着您的$post->user
为null
或不是object
,而是array
(可能性较小)。
可能性较高的问题是null
。你检查过了吗?我希望你在显示用户名时使用{{$post->user->name ?? ''}}
(仅在php 7中支持)。这意味着如果未设置$post->user->name
则不显示任何内容。
检查$post->user
是否为null
。如果null
为post
,那么问题是,为什么$post->user
可以是null
?可能的原因是什么?
$post->user
为null的可能原因是:
posts
表格中包含user_id
列。posts
表格中,user_id
可以为空,因为某个帖子user_id
为空。 user_id
与不存在的user
相关联。这可以限制使用外来约束。 答案 1 :(得分:0)
@Ahmed, 你的模型,视图和控制器看起来很正常。 它应该工作。 请确保在您的数据库中,它具有该列名称?