无法在laravel blade上获得可变形属性

nhn9ugyo  于 2023-04-22  发布在  其他
关注(0)|答案(1)|浏览(102)

我有一个评论和帖子模型如下:
备注模型关系:

public function commentable(): MorphTo
    {
        return $this->morphTo();
    }

后模型关系:

public function comments(): MorphMany
    {
        return $this->morphMany(Comment::class, 'commentable')->notReply();
    }

我试着通过它评论得到一个帖子:

$comments = Comment::blog()->with('commentable')->latest()->paginate(50);

到目前为止没有问题,但是当我想在@foreach循环中回显刀片上的commentable->title时,它返回Attempt to read property "title" on null。但是当我使用dd($comment->commentable->title)时,它返回post title,

@foreach($comments as $key=> $comment)
       {{ dd($comment->commentable->title) }} // returns post title
       {{ $comment->commentable->title }} // returns Attempt to read property "title" on null
   @endforeach

我尝试在Comment模型中使用方法:

public function postTitle(): ?string
    {
        return $this->commentable->title;
    }

但是它在echo上再次返回问题,并在dd()上返回标题

已解决:

有一个softDeleted评论后.当我试图回显评论,它返回错误.如果你正面临这个问题,不要忘记检查你的数据库数据:))

gab6jxml

gab6jxml1#

一旦你使用dd(),它就像dump()die()一样工作,问题是当你试图在循环中检查dd()的值时,它只会转储第一个值并中断循环,因为die()
在你的例子中,可能有一个$comment没有相关的commetable,所以当你循环到$comment时,它将从$comment->commetable获得一个null,当你试图从null访问一个属性title时,你将获得Exception
对于简单的验证,您可以尝试:

@foreach($comments as $key=> $comment)
       {{ !is_null($comment->commentable) ? $comment->commentable->title : 'I do not have any commentable.' }} // returns Attempt to read property "title" on null
 @endforeach

相关问题