外键引用作为枚举?

时间:2019-03-29 23:07:43

标签: laravel database-design

我正在Laravel中创建一个“收藏夹”表,该收藏夹项可以是另一个用户,一个用户组或一个报表。该列表将来可能会增加,使用户可以收藏更多东西。

这是我使用偏头痛数据库的地方:

Schema::create('favorites'. function (Blueprint $table) {
  $types = ['user', 'user_group', 'report'];
  $table->increments('id');
  $table->foreign->('user_id')->references('id')->on('users');
  $table->enum('item_type', $types);
  $table->foreign->('item_id')->references('id')->on($types)

这项工作正常吗?如果没有,如何编码不同类型的收藏夹?谢谢!

1 个答案:

答案 0 :(得分:0)

您可以参考一些答案here,以了解是否应在情况下使用枚举。

如果我是你,我可能会创建3个布尔值来检查类型:

$table->boolean('is_user')->default(0);
$table->boolean('is_user_group')->default(0);
$table->boolean('is_report')->default(0);

或者只使用普通字符串:

$table->string('item_type');

对于输入验证,我将在控制器中进行操作,以避免enum引起的任何不必要的错误。