英文:
can't get morphable property on laravel blade
问题
以下是已翻译的内容:
我有以下的Comment(评论)和Post(帖子)模型:
Comment模型关联:
public function commentable(): MorphTo
{
return $this->morphTo();
}
Post模型关联:
public function comments(): MorphMany
{
return $this->morphMany(Comment::class, 'commentable')->notReply();
}
我试图通过评论获取帖子:
$comments = Comment::blog()->with('commentable')->latest()->paginate(50);
到目前为止没有问题,但当我在@foreach
循环中的Blade模板中使用commentable->title
进行输出时,
它返回尝试读取null属性"title"
的错误。
但是当我使用dd($comment->commentable->title)
时,它返回帖子标题:
@foreach($comments as $key => $comment)
{{ dd($comment->commentable->title) }} // 返回帖子标题
{{ $comment->commentable->title }} // 返回尝试读取null属性"title"的错误
@endforeach
我尝试在Comment模型中使用方法:
public function postTitle(): ?string
{
return $this->commentable->title;
}
但再次在输出时出现问题,并在dd()
中返回标题。
已解决:
帖子上有一个被软删除的评论。当我尝试输出评论时,它返回错误。
如果你遇到这个问题,请不要忘记检查你的数据库数据:)
英文:
I have a Comment and Post models as below:
Comment model relation:
public function commentable(): MorphTo
{
return $this->morphTo();
}
Post model relation:
public function comments(): MorphMany
{
return $this->morphMany(Comment::class, 'commentable')->notReply();
}
i'm try to get a post by its comment:
$comments = Comment::blog()->with('commentable')->latest()->paginate(50);
So far there is no problem, but when i want to echo commentable->title
on blade in @foreach
loop,
it returns Attempt to read property "title" on null
.
but when i use dd($comment->commentable->title)
, it returns 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
I tried use method in Comment model:
public function postTitle(): ?string
{
return $this->commentable->title;
}
but again it return problem on echo and returns title on dd()
SOLVED:
There was a softDeleted comment on post. When I tried to echo comment, it returned error.
if you are facing this problem, don't forget to check your db data :))
答案1
得分: 1
Once you using dd()
it work as dump()
and die()
, the problem is when you trying to dd()
checking value in a loop, it'll only dump the first value and break the loop, because of die()
.
In your case, there probably a $comment
doesn't have a related commetable
, so when you loop to the $comment
, it will get a null from $comment->commetable
, and you will get the Exception
when you trying to access a property title
from null.
For a simple verification, you can try:
@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
英文:
Once you using dd()
it work as dump()
and die()
, the problem is when you trying to dd()
checking value in a loop, it'll only dump the first value and break the loop, because of die()
.
In your case, there probably a $comment
doesn't have a related commetable
, so when you loop to the $comment
, it will get a null from $comment->commetable
, and you will get the Exception
when you trying to access a property title
from null.
For a simple verification, you can try:
@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
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论