Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 尝试使用雄辩关系时尝试获取非对象错误的属性_Php_Mysql_Database_Laravel_Eloquent - Fatal编程技术网

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();

请参见

首先,我建议您将关系重命名为just
user()
(一开始我认为它会返回一个集合)。错误的来源可能是未指定用户的注释

最好的方法就是从查询中排除这些内容。您可以使用
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