【问题标题】:Laravel MYSQL Foriegn KeyLaravel MYSQL 外键
【发布时间】:2020-12-13 20:54:39
【问题描述】:

在使用 MYSQL 为 laravel 软件设计数据库时,分配相关的外键还是 Laravel 负责“软件方面”。

在迁移中我们有类似的东西

表格示例:

$table->unsignedBigInteger('user_id');

我应该修改 phpmyadmin 中的示例表并使 user_id 成为外键吗?有没有更好的方法或者这不相关或没有必要?

【问题讨论】:

  • 这不是必需的,但对数据完整性很有好处;数据库是执行此类约束的好地方
  • @lagbox 非常感谢,但它会影响数据库加载或性能吗?
  • 如果定义名称为user_id,那么Laravel模型可以检测为usersid。但是如果你定义了任何其他名称,那么你需要告诉 laravel 外键名称,同时在模型上建立关系
  • @KhalilGhanem 它确实会影响,因为在 MySQL 中声明外键将创建一个索引,让基础负载更有效。在小型数据库上,差异可以忽略不计,但在更大的数据库上,您真的可以在几秒钟内看到差异。

标签: php mysql laravel key


【解决方案1】:

您应该在迁移中定义外键约束。使用代码库时,您应该使用迁移进行所有更改。

此外,通过定义外键,您实际上可以在 2 个表之间建立关系,否则这种关系将处于代码级别。建立关系时,数据库将限制为仅具有主表中实际存在的值。使用外键您也可以在数据库级别执行cascading (on update and delete)

参考what are the advantages of defining a foreign key

Why should I use foreign keys in database?

【讨论】:

    【解决方案2】:

    如果使用 Laravel 7,你可以使用这个简短的列名 user_id,对于表 users 中的 ID user 是外来的:

    $table->foreignId('user_id')->nullable()->constrained()->onDelete('cascade');
    

    【讨论】:

      猜你喜欢
      • 2019-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-24
      • 2021-05-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多