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

标签 php mysql laravel laravel-5.4

我有一个“评论”表,其外键为“content_id”,限定符列(如果您愿意)为“content_type”。该列中的可能值例如文章、俱乐部、挑战。由于文章、俱乐部和挑战都有自己的内容类型(不同的表、模型、 Controller 等),并且在通过 hasMany 关联时,每个都有一个自动递增的主键字段(id:1,2,..,n)我想使用评论表上的 content_id 和 content_type 列来区分属于第 1 条而非俱乐部 1 或挑战 1 的外国 content_id 为 1 的评论。

我可以有 ArticleComment、ClubComment 和 ChallengeComment 的表格/类型,但这对我来说很奇怪。在 SQL 中,我只想说(基本上)select * from comments where content_id = 1 and content_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');

它确实会抓取 content_id 与文章匹配的所有评论以及具有该 ID 的所有其他内容。

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

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

有什么线索或技巧吗?

最佳答案

mkaatman 的评论“调查 Eloquent 多态关系”是解决我的问题的适当方法。非常感谢。简单明了。

关于php - Laravel:如何对多种内容类型进行评论?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43101128/

相关文章:

mysql - 如何从表中获取最新日期数据

laravel - 我在全局安装 Composer 时收到错误 "No such file or directory"

php - 使用 root :root instead of webapp:webapp 创建的 Laravel 日志文件

php - 关联数组到数据库的列中

php - 文件上传中的PHP错误处理

php - MySQL 事务时序

mysql - 项目特定 : PostgreSQL or MySQL need advice

MySQL 字符串操作以计算字段中的值

PHP - 寻找 HTML 生成器/管理器

php - Laravel + React,通过 Laravel 身份验证使用 api