laravel - 抛出 ErrorException 并显示消息“尝试获取非对象的属性‘用户’
问题描述
我在我的 laravel 项目中使用关系。我正在尝试展示我的帖子和回复。但我不断收到这个错误。我尝试了各种解决方案,但都没有奏效。谁能帮我?
岗位型号:
protected $fillable = [
'title', 'content', 'category_id' , 'slug', 'user_id',
];
public function user1()
{
return $this->belongsTo('App\User');
}
public function replies()
{
return $this->hasMany('App\Reply');
}
回复型号:
protected $fillable = ['content','user_id','posts_id'];
public function post(){
return $this->belongsTo('App\Post');
}
public function user()
{
return $this->belongsTo('App\User');
}
后控制器:
public function shro($slug)
{
$pst= Post::where('slug',$slug)->first();
return view('posts.show')->with('p', $pst);
}
show.blade.php
<div class="panel panel-default">
<div class="panel-heading">
<img src="/uploads/avatars/{{ $p->user->avatar }}" alt="" width="70px" height="60px">
<span>{{ $p->user->name }}, <b>{{ $p->created_at->diffForHumans() }}</b></span></br>
</div>
解决方案
$p
, or $pst
(混淆变量名) is null
, 这是因为->first()
可以返回null
. 您Post
的数据库中是否有匹配的记录slug
?
经验法则;永远不要假设某事存在。
Post
在尝试访问它的属性之前添加一些逻辑以确保存在:
$post = Post::where("slug", $slug)->first();
if(!$post){
abort(404);
}
return view('posts.show')->with('post', $post);
// OR
$post = Post::where("slug", $slug)->findOrFail(); // or firstOrFail();
return view('posts.show')->with('post', $post);
另外,检查您的$post->user
:
@if($post->user)
<img src="/uploads/avatars/{{ $post->user->avatar }}" width="70px" height="60px"/>
<span>{{ $post->user->name }}, <b>{{ $post->created_at->diffForHumans() }}</b></span></br>
@endif
如果$post->user
返回null
,您将遇到类似的错误。
推荐阅读
- function - GnuCOBOL 2.0 中的递归尾函数(使用 OpenCobolIDE 4.7.6)
- opencv - 彩色图像输入的模板匹配
- php - PHP preg 匹配正则表达式面临瑞典字母表中的奇怪符号
- python - OpenCV mp4 视频渲染在 pygame 中非常 Choppy
- javascript - 在 three.js 上覆盖视频提要
- c# - 将 Linq 查询表达式转换为 Linq Lambda 表达式
- bouncycastle - Corda - 解码 Base58 公钥不起作用
- android - /tree/primary 与 /document/primary
- android - 安装后,我的应用在某些 Android 版本上没有开始按钮
- php - 如何检查 Doctrine 引用是否有效?