【问题标题】:One-to-many relationship with a variable table与变量表的一对多关系
【发布时间】:2014-09-30 03:17:19
【问题描述】:

所以,我有一个电视节目的网站,我目前有以下表格结构(仅列出相关列):

Table 1 - TV Shows
id

Table 2 - Episodes
id

Table 3 - Comments 
target
value

TV Shows 和 Episodes 都可以有 cmets,因此“target”列指定它是“TV Show”还是“Episode”评论,“value”列指定其 ID。

我已经考虑过合并两列并使用“x_ID”(“tvshow_id”或“episode_id”,例如:“tvshow_45”或“episode_9458”)。

但我真正想知道的是:最好的方法是什么?通过我描述的两种方式,我不能使用外键(我不知道这样做的好处,但我想这很好)。还有一个问题是使用 Laravel 的 Eloquent 功能……

我可以只创建两个 cmets 表,但我不知道这是唯一还是最好的方法...

有人可以帮我解决这个问题吗?

提前谢谢你。

加布。

【问题讨论】:

  • 要完全回答这个问题,您需要了解您将用于获取此数据的访问模式。例如,您是否会一直在查询节目信息和剧集信息?您是否需要直接搜索 cmets 并找到它们相关的节目/剧集?等等……

标签: mysql sql laravel eloquent relationships


【解决方案1】:

它在 laravel 中的工作方式,你使用 commentable_* 列:

id, commentable_id, commentable_type, value

然后您使用a polymorphic relationship,以便 Eloquent 为您处理一切。


如果您使用迁移,laravel 可以为您生成这些列:

Schema::create('comments', function($table)
{
    $table->increments('id');
    $table->morphs('commentable');
    $table->string('value');
});

它甚至会自动为你创建一个复合索引!

【讨论】:

  • 正是我需要的!我现在感觉很愚蠢,在文档上错过了它,哈哈。非常感谢!
猜你喜欢
  • 2019-03-20
  • 1970-01-01
  • 2010-11-25
  • 2018-03-16
  • 2015-11-05
  • 1970-01-01
  • 2019-10-15
  • 1970-01-01
  • 2018-10-03
相关资源
最近更新 更多