Php Laravel:如何对多种内容类型进行评论?

Php Laravel:如何对多种内容类型进行评论?,php,mysql,laravel,laravel-5.4,Php,Mysql,Laravel,Laravel 5.4,我有一个“comments”表,外键为“content\u id”,限定符列(如果愿意)为“content\u type”。该栏中的可能值为,例如,文章、俱乐部、挑战。因为文章、俱乐部和挑战都是各自类型的内容(不同的表格、模型、控制器等),并且都有一个自动递增的主键字段(id:1,2,…,n)当通过hasMany进行关联时,我想使用评论表上的content_id和content_type列来区分外国内容id为1的评论,这些评论属于第1条,而不是Club 1或Challenge 1 我可以有Art

我有一个“comments”表,外键为“content\u id”,限定符列(如果愿意)为“content\u type”。该栏中的可能值为,例如,文章、俱乐部、挑战。因为文章、俱乐部和挑战都是各自类型的内容(不同的表格、模型、控制器等),并且都有一个自动递增的主键字段(id:1,2,…,n)当通过hasMany进行关联时,我想使用评论表上的content_id和content_type列来区分外国内容id为1的评论,这些评论属于第1条,而不是Club 1或Challenge 1

我可以有ArticleComment、ClubComment和ChallengeComment的表格/类型,但这对我来说很难闻。在SQL中,我会说(基本上)
select*来自content\u id=1和content\u type='article'
的命令

mysql> select * from comments where content_id = 1 and content_type = 'article';
+----+---------+------------+--------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------+---------------------+
| id | user_id | content_id | content_type | body                                                                                                                                                                                                                                                         | created_at          | updated_at          |
+----+---------+------------+--------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------+---------------------+
|  1 |      51 |          1 | article      | Laborum veniam placeat velit aut doloribus rem vitae quisquam. Qui occaecati dolores cupiditate et. Ut nam cupiditate vitae impedit blanditiis recusandae. Non temporibus minima quae rem occaecati temporibus molestiae. Eligendi ipsa laborum velit natus. | 2017-03-29 15:09:13 | 2017-03-29 15:09:13 |
|  2 |      52 |          1 | article      | Quos et molestiae sequi aut. Dolorum eius dolorem est et sint voluptas ut. Ut ab et hic sed tenetur eaque. Neque aut qui labore animi architecto sit. Sunt excepturi laborum pariatur at dolorem est.                                                        | 2017-03-29 15:09:13 | 2017-03-29 15:09:13 |
|  3 |      53 |          1 | article      | Quae ducimus minus et architecto non. Quas delectus accusantium sunt ipsam quisquam voluptas. Autem quo assumenda aut qui.                                                                                                                                   | 2017-03-29 15:09:13 | 2017-03-29 15:09:13 |
|  4 |      54 |          1 | article      | Ut officiis totam doloremque et amet est. Modi et quia dolores fugit modi temporibus. Dicta dolor nemo enim. Unde quos ab voluptatum nihil ducimus reiciendis accusantium. Qui vel rem sunt sit quasi autem.                                                 | 2017-03-29 15:09:13 | 2017-03-29 15:09:13 |
|  5 |      55 |          1 | article      | Velit saepe vero officia reiciendis sed nisi aut. Aliquam id dolorem eum qui molestiae dolores quam. Error adipisci possimus voluptatem aut. Sed odio quae et esse veniam quisquam est.                                                                      | 2017-03-29 15:09:13 | 2017-03-29 15:09:13 |
|  6 |      56 |          1 | article      | Totam similique illum autem ut odio nihil. Placeat sunt labore suscipit sapiente et totam et. Modi autem aut ut et dolorem laudantium et. Hic laboriosam vel odio accusantium dolor quia soluta.                                                             | 2017-03-29 15:09:13 | 2017-03-29 15:09:13 |
|  7 |      57 |          1 | article      | Voluptas facere dolores porro quas est. Dolorem sunt quis adipisci ut. Et et vero minus similique beatae distinctio ducimus. Voluptas iure laudantium incidunt aut.                                                                                          | 2017-03-29 15:09:13 | 2017-03-29 15:09:13 |
|  8 |      58 |          1 | article      | Aut libero temporibus necessitatibus et vel sit officia sit. Esse aliquid placeat amet illum dolor aut fugiat.                                                                                                                                               | 2017-03-29 15:09:13 | 2017-03-29 15:09:13 |
|  9 |      59 |          1 | article      | Repellat ducimus ipsa adipisci aliquid. Mollitia laborum ea omnis aut error error. Hic dolore qui vero nobis repellendus exercitationem amet dolores. Corrupti facere labore incidunt reprehenderit quo officia.                                             | 2017-03-29 15:09:13 | 2017-03-29 15:09:13 |
| 10 |      60 |          1 | article      | Deserunt quae provident veritatis rerum unde. Voluptas dolores quia velit repellat ad ipsa saepe. Officiis corporis magni id ullam deleniti. Porro aut non veniam dolore quas suscipit.                                                                      | 2017-03-29 15:09:13 | 2017-03-29 15:09:13 |
+----+---------+------------+--------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------+---------------------+
10 rows in set (0.00 sec)
我对模型的评论关系如下所示:

    return $this->hasMany(Comment::class, 'content_id');
而且,它正确地抓取了所有内容id与文章匹配的评论,以及所有其他具有该id的内容

我想添加一些限定符,这样我就可以说“and content_type='mytype'”。我在谷歌上搜索了一下,还没有找到一种直接的方法来做我认为是简单的区分

我不喜欢多注释类型的代码臭味(IMO)版本,我可以进行Drupal类型设置,其中我有一个存储所有此类内容的节点/内容表,然后引用另一个表,但我认为我会处于类似的场景中,也会给这些类型的存储增加一些复杂性

有什么线索或提示吗?

mkaatman的评论“研究雄辩的多态关系”是解决我问题的合适方法。非常感谢。简洁明了。

深入研究。