|
Post by account_disabled on Jan 28, 2024 2:47:41 GMT -8
本文由Younes Rafie进行同行评审。感谢所有 SitePoint 的同行评审者使 SitePoint 内容达到最佳状态! 徽标 您可能在模型或数据库表之间使用过不同类型的关系,例如 Laravel 中常见的关系:一对一、一对多、多对多和多对多。但还有另一种关系并不常见:多态。那么什么是多态关系呢? 多态关系是指一个模型可以在单个关联上属于多个其他模型。 为了澄清这一点,让我们创建一个假想的情况,其中我们有Topic和Post模型。用户可以对主题和帖子发表评论。comments使用多态关系,我们可以针对这两种情况使用单个表。令人惊讶,是吗?这似乎有点不切实际,因为理想情况下,我们必须创建一个post_comments表和一个topic_comments表来区分评论。通过多态关系,我们不需要两个表。让我们通过一个实际示例来研究多态关系。 我们将要建设什么 我们将创建一个包含歌曲和专辑的演示音乐应用程序。在此应用程序中,我们可以选择对歌曲和专辑进行投票。使用多态关系,我们将针对这两种情况使用单个赞成表。 首先,让我们检查一下建立这种关系所需的表结构 我们来谈谈upvoteable_id和upvoteable_type列,对于那些以前没有使用过多态关系的人来说,这可能有点陌生。该upvoteable_id列将包含专辑或歌曲的 ID 值,而该upvoteable_type列将包含所属模型的类名称。该upvoteable_type列是 ORM 如何确定 WhatsApp 号码数据 在访问关系时返回所属模型的“类型” upvoteable。 随迁移生成模型 我假设您已经有一个已启动并正在运行的 Laravel 应用程序。如果没有,这个高级快速入门课程可能会有所帮助。我们首先创建三个模型和迁移,然后编辑迁移以满足我们的需求。 php artisan make:model 请注意,-m在创建模型时传递该标志也将生成与这些模型关联的迁移。让我们调整up这些迁移中的方法以获得所需的表结构:现在让我们配置模型来记录专辑、歌曲和点赞之间的多态关系: 应用程序应用程序定义了关系后,我们现在可以使用该应用程序,以便更好地了解多态关系的工作原理。我们不会为此应用程序创建任何视图,我们只是从控制台修改我们的应用程序。 如果您正在考虑控制器以及我们应该在哪里放置该upvote方法,我建议创建检索关系 现在我们已经有了一些数据,我们可以通过模型访问我们的关系。以下是赞成表内数据的屏幕截图: 点赞表 要访问专辑的所有赞成票,我们可以使用赞成票动态属性现在,我们可以添加这个新的点赞记录 它的行为方式与前面的示例完全相同。 结论 尽管您可能从未遇到过需要使用多态关系的情况,但这一天最终可能会到来。使用 Laravel 的好处是,处理这种情况真的很容易,而无需进行任何类型的模型关联技巧来让事情正常工作。Laravel 甚至支持多对多多态关系。您可以在这里阅读更多相关内容。 我希望您现在已经了解多态关系以及可能需要这些类型关系的情况。关于多态关系的另一个稍微更高级的示例可以在这里找到。如果您觉得这有帮助,请与您的朋友分享,不要忘记点击“喜欢”按钮。请随时在下面的评论部分留下您的想法! 分享此文章 克里斯托弗·温迪并在博客上分享了一些技巧。克里斯还喜欢旅行。
|
|