代码之家  ›  专栏  ›  技术社区  ›  kamm

使用硬编码的值集代替Laravel中的传统雄辩模型

  •  1
  • kamm  · 技术社区  · 8 年前

    我想在两件事之间建立一种多对多的关系: 注释 和 标签 。但是,我希望在代码中定义标签本身,而不是在数据库表中定义标签。

    除了 notes 表表示注释模型,我希望有一个“透视”表( labels_notes )有两列: note_id 和 label 。

    所以,我的问题是: 在注释模型上,eager-load、getter、setter和“通过标签获取注释”方法是如何工作的?

    背景: 希望标签出现在代码中而不是作为表的内容的主要原因是它们是一组小的固定值;不允许用户修改它们。此外,围绕某些标签的代码中可能需要有特殊的逻辑。我考虑将它们存储在 注释 ,但我担心按标签搜索注释时对性能的影响。

    1 回复  |  直到 8 年前
        1
  •  2
  •   kamm    8 年前

    我选择的解决方案是为标签使用传统的雄辩模型(包括专用数据库表),但是 通过迁移将所需的值注入其中,并使用字符串主键。 这样,我们就能够按照预期的方式使用雄辩,而不是与之对抗。

    使用字符串主键意味着我们可以基于特定标签编写逻辑,而不必担心任意数字id(即“id=news”vs“id=12112”)。请注意,这样做还需要添加 public $incrementing = false; 在标签模型类中。

    通过迁移注入必要的标签,我们可以避免在部署时有额外的设置任务,还可以避免将代码与外部进程耦合。