Php 尝试使用雄辩关系时尝试获取非对象错误的属性
错误如下所示:Php 尝试使用雄辩关系时尝试获取非对象错误的属性,php,mysql,database,laravel,eloquent,Php,Mysql,Database,Laravel,Eloquent,错误如下所示: Trying to get property of non-object (View: C:\xampp\htdocs\laravel\app\views\singlePost.blade.php) 有两个表:注释和用户。在comments表中有一个名为user_id的列,它引用了users表中的id列。在users表中有username列。这就是我试图打印用户名的方式 @foreach($theComments as $theComment) <div>{{$th
Trying to get property of non-object (View: C:\xampp\htdocs\laravel\app\views\singlePost.blade.php)
有两个表:注释和用户。在comments表中有一个名为user_id的列,它引用了users表中的id列。在users表中有username列。这就是我试图打印用户名的方式
@foreach($theComments as $theComment)
<div>{{$theComment->users->username}}</div>
<div style="border:1px solid black;margin:8px 0px 8px 0px">{{$theComment['content']}}</div>
@endforeach
和/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();
请参见首先,我建议您将关系重命名为justuser()
(一开始我认为它会返回一个集合)。错误的来源可能是未指定用户的注释
最好的方法就是从查询中排除这些内容。您可以使用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
@foreach($theComments作为$theComment)
@如果($user=$theComment->users)
{{$user->username}
@恩迪夫
@endforeach
在哪里?在我观看的教程中,我没有看到类似的内容。我可以知道答案有什么问题吗?只是放弃投票和离开并没有真正的帮助。急切地加载用户
对解决问题没有帮助。您可以在不加载关系的情况下访问它们(延迟加载)(尽管在这种情况下绝对不建议这样做)是的,但这将导致触发额外的Db查询。当然,但不会导致此错误=>不是正确答案每个注释都有用户id。我为什么要将其更改为用户?将其更改为用户只是一个建议,因为它在语义上更有意义。我将用一段代码更新我的问题,您可以在几秒钟内尝试。正如我现在了解到的,必须是user()而不是您所说的users()。因为拉威尔寻找“s”。谢谢。等等,那么你只需要将它重命名为user()
就可以了?
@foreach($theComments as $theComment)
@if($user = $theComment->users)
<div>{{$user->username}}</div>
@endif
@endforeach