【问题标题】:Laravel - Multiple PostTypes models in relation to one CommentModelLaravel - 与一个 CommentModel 相关的多个 PostTypes 模型
【发布时间】:2021-11-22 19:21:34
【问题描述】:

一个包含两个部分的 Laravel 网站:帖子和产品评论。两者都可以评论。所以我有三个模型:Post、Advisor 和 Comment。

我的考虑

Post.php

id title content
1 post_title_1 lorem 1
2 post_title_2 lorem 2
3 post_title_3 lorem 3

Advisor.php

id title content link likes
1 advisor_title_1 lorem 1 www1 100
2 advisor_title_2 lorem 2 www2 110
3 advisor_title_3 lorem 3 www3 120

Comment.php

id related_id type comment_content
1 1 \App\Models\Post lorem 1
2 1 \App\Models\Post lorem 2
3 1 \App\Models\Advisor lorem 3
// Two Comments for Post with id 1
// One Comment for Advisor with id 1

这就是理论。但我不知道如何写关系。因此我的问题: Post 和 Advisor 模型中的关系应该怎么写?

这些是我的模型,它们的关系仍然“错误”:

Post.php

public function comments() {
    return $this->hasMany(Comment::class);
}

Advisor.php

public function comments() {
    return $this->hasMany(Comment::class);
}

Comment.php

public function posts() {
    return $this->belongsTo(Post::class);
}

public function advisor() {
    return $this->belongsTo(Advisor::class);
}

如何重写这三个模型中的关系。以便我可以正确检索以下关系?

  1. $post->cmets
  2. $advisor->cmets
  3. $comment->发布
  4. $comment->顾问

【问题讨论】:

标签: laravel


【解决方案1】:

这是基本 laravel 框架中包含的一个称为多态关系的功能,您应该在此处查看documentation。

【讨论】:

  • 你知道在commentable_type字段中写类的格式是什么吗? App\Models\Post 或 App\Model\Post 或 App\Model\Post::class 或只是发布?
  • @MaikLowrey laravel 会在您使用关系时自动为您处理,默认情况下它是App\Models\Post 但是您可以覆盖它检查this 以获取有关信息,但通常您不会需要担心。
猜你喜欢
  • 1970-01-01
  • 2017-11-04
  • 2018-04-15
  • 2014-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-14
相关资源
最近更新 更多