为啥我在尝试访问“$comment->users->username”时收到“尝试获取非对象的属性 'username'”?

Posted

技术标签:

【中文标题】为啥我在尝试访问“$comment->users->username”时收到“尝试获取非对象的属性 \'username\'”?【英文标题】:Why am I getting "Trying to get property 'username' of non-object" when trying to access "$comment->users->username"?为什么我在尝试访问“$comment->users->username”时收到“尝试获取非对象的属性 'username'”? 【发布时间】:2019-05-19 10:07:29 【问题描述】:

我正在尝试获取已发布 cmets 的用户的用户名,但是,我不断收到“尝试获取非对象的属性‘用户名’”错误。我相信我的关系是正确的,但我可能错了。

我的桌子:

Table: Users
Columns: id, username, password

Table: Comments
Columns: id, user_id, image_id, comment

评论模型:

class Comment extends Model

    public function users()
        return $this->belongsTo('App\User');
    

用户模型:

class User extends Model implements Authenticatable

    public function comments()
        return $this->hasMany('App\Comment');
    

我得到这样的 cmets:

$comments = Comment::with('users')->where('image_id', $id)->get();

然后尝试像这样在视图中循环它们:

@foreach($comments as $comment)
    <p> $comment->comment </p>
    <p> $comment->users->username </p>
@endforeach

当我 dd($cmets) 时,我看到了:

 #relations: array:1 [▼
        "users" => null
 ]

我不知道为什么它是空的。

【问题讨论】:

为什么?因为$comment-&gt;users 不是对象 据我了解,我可以根据***.com/questions/29165410/… 做到这一点。 Reference - What does this error mean in php?的可能重复 你的关系是正确的。也许你的分贝不正确。检查 cmets 表 user_id 列是否为空??4 【参考方案1】:

试试这个

@foreach($comments as $comment)
    <p> $comment->comment </p>
    <p> !empty($comment->users->username) ? $comment->users->username : '' </p>
@endforeach

另外我建议你把你的关系名称users改成user

class Comment extends Model

    public function user()
        return $this->belongsTo('App\User');
    

获取cmets

$comments = Comment::with('user')->where('image_id', $id)->get();

在视野中

@foreach($comments as $comment)
    <p> $comment->comment </p>
    @if(!empty($comment->user))
        <p> $comment->user->username </p>
    @endif
@endforeach

【讨论】:

你试试吗??【参考方案2】:

试试这个方法:

@foreach($comments as $comment)
    <p> $comment->comment </p>
    <p> $comment->users["username"] </p>
@endforeach

【讨论】:

【参考方案3】:
@foreach($comments as $comment)
<p> $comment->comment </p>
<p> optional($comment->users)->username</p> 
@endforeach

试试这个方法。

【讨论】:

以上是关于为啥我在尝试访问“$comment->users->username”时收到“尝试获取非对象的属性 'username'”?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我在尝试通过 Matlab ftp 访问 Box 时收到“连接被拒绝”?

为啥我在尝试访问“$comment->users->username”时收到“尝试获取非对象的属性 'username'”?

为啥我在尝试仅从我的 Ubuntu 访问 gitlab 时突然得到 ERR_TIMED_OUT?

调试为啥我在 Apache 2.4 中得到“你没有访问权限”

为啥我的 UICollectionView 无法访问我在 for 循环中创建的数组 - 致命错误:索引超出范围

为啥我在 s3 上的访问被拒绝(使用适用于 Node.js 的 aws-sdk)?