在尝试使用 eloquent 关系时尝试获得 属性 的非对象错误
Trying to get property of non-object error while trying to use eloquent relationship
错误如下:
Trying to get property of non-object (View: C:\xampp\htdocs\laravel\app\views\singlePost.blade.php)
有 2 tables:评论和用户。在评论 table 中有一个名为 user_id 的列,它引用了用户 table 中的 id 列。用户 table 中有用户名列。这就是我尝试打印用户名的方式。
@foreach($theComments as $theComment)
<div>{{$theComment->users->username}}</div>
<div style="border:1px solid black;margin:8px 0px 8px 0px">{{$theComment['content']}}</div>
@endforeach
和控制器:
public function singlePost(Posts $post)
{
$id = $post['id'];
$comments = Comments::where('post_id','=',$id)->get();
$users = Users::all();
return View::make('singlePost')->with('thePost', $post)->with('theComments', $comments)->with('theUser', $users);
}
和/Model/Comments.php
<?php
class Comments extends Eloquent{
protected $fillable = array('user_id');
public function users(){
return $this->belongsTo('Users');
}
}
有什么问题,我该如何解决?
您需要先加载关系
$comments = Comments::with('users')->where('post_id','=',$id)->get();
首先我建议你将关系重命名为user()
(一开始以为它会return一个集合)。错误的来源可能是没有分配给用户的评论。
最好的方法就是将它们从您的查询中排除。您可以使用 has()
作为
$comments = Comments::has('user')->where('post_id','=',$id)->get();
并且您还应该预先加载 用户关系,否则您将遇到 n+1 查询问题:
$comments = Comments::has('user')->with('user')->where('post_id','=',$id)->get();
编辑
如果在您的视图中环绕它,请尝试环绕它:
@foreach($theComments as $theComment)
@if($user = $theComment->users)
<div>{{$user->username}}</div>
@endif
@endforeach
错误如下:
Trying to get property of non-object (View: C:\xampp\htdocs\laravel\app\views\singlePost.blade.php)
有 2 tables:评论和用户。在评论 table 中有一个名为 user_id 的列,它引用了用户 table 中的 id 列。用户 table 中有用户名列。这就是我尝试打印用户名的方式。
@foreach($theComments as $theComment)
<div>{{$theComment->users->username}}</div>
<div style="border:1px solid black;margin:8px 0px 8px 0px">{{$theComment['content']}}</div>
@endforeach
和控制器:
public function singlePost(Posts $post)
{
$id = $post['id'];
$comments = Comments::where('post_id','=',$id)->get();
$users = Users::all();
return View::make('singlePost')->with('thePost', $post)->with('theComments', $comments)->with('theUser', $users);
}
和/Model/Comments.php
<?php
class Comments extends Eloquent{
protected $fillable = array('user_id');
public function users(){
return $this->belongsTo('Users');
}
}
有什么问题,我该如何解决?
您需要先加载关系
$comments = Comments::with('users')->where('post_id','=',$id)->get();
首先我建议你将关系重命名为user()
(一开始以为它会return一个集合)。错误的来源可能是没有分配给用户的评论。
最好的方法就是将它们从您的查询中排除。您可以使用 has()
作为
$comments = Comments::has('user')->where('post_id','=',$id)->get();
并且您还应该预先加载 用户关系,否则您将遇到 n+1 查询问题:
$comments = Comments::has('user')->with('user')->where('post_id','=',$id)->get();
编辑
如果在您的视图中环绕它,请尝试环绕它:
@foreach($theComments as $theComment)
@if($user = $theComment->users)
<div>{{$user->username}}</div>
@endif
@endforeach