【问题标题】:Trying to get property 'comments' of non-object (View: /Applications/AMPPS/www/zenit/resources/views/middleware.blade.php)试图获取非对象的属性“评论”(查看:/Applications/AMPPS/www/zenit/resources/views/middleware.blade.php)
【发布时间】:2020-07-07 10:02:17
【问题描述】:

我尝试获取属于项目的 cmets,一个特殊用户已发布但收到此错误:

试图获取非对象的属性“cmets”(查看:/Applications/AMPPS/www/zenit/resources/views/middleware.blade.php)

我在 middleware.blade.php 中创建了一个 foreach 循环,如下所示;

@foreach(Auth::user()->courses->comments as $comment)

在 My Course 模型中,我创建了 hasManyThrough 关系,如下所示

public function comments()
{
    return $this->hasManyThrough(Comment::class, Project::class, 'course_id', 'project_id', 'id', 'id');
}

我的 projects 表有一个 course_id 列,我的 cmets 表有一个 project_id 列

有人可以帮助我吗?提前致谢

【问题讨论】:

  • 转储Auth::user()->courses会得到什么?
  • 当我转储 Auth::user()->课程我得到空
  • 嗯,你有它。检查您的 User 课程是如何补充水分的 - 那里没有任何课程。
  • 也感觉由于公式:->courses->comments,课程应该是一个集合,所以不可能得到这样的cmet。
  • 请通过编辑问题而不是在 cmets 中添加相关代码。如果这是一个函数,那么你应该这样称呼它:->courses()。致电->courses 正在寻找公共财产。

标签: php laravel eloquent


【解决方案1】:

首先,如果你给你的 belongsTo 关系一个单数而不是复数会更好,因为它只检索 1 个对象:

public function course()
{
    return $this->belongsTo(Course::class);
}

而且在某些情况下$user->course 可以为空,所以它不会有 cmets,所以只需在 foreach 循环之前检查这种情况

// in some blade template
@if(auth()->user()->course)
    @foreach(auth()->user()->course->comments as $comment)
        {{ $comment->id }}
    @endforeach
@endif

【讨论】:

    猜你喜欢
    • 2018-09-25
    • 1970-01-01
    • 1970-01-01
    • 2018-03-22
    • 2019-02-24
    • 2020-09-26
    • 2019-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多