Laravel迁移,无法创建外键

huangapple go评论80阅读模式
英文:

Laravel migration, can't create foreign key

问题

以下是要翻译的内容:

Those are the following migration files:

User migration

  1. Schema::create('users', function (Blueprint $table) {
  2. $table->uuid('id');
  3. $table->string('name');
  4. $table->string('email')->unique();
  5. $table->timestamps();
  6. });

Log migration

  1. Schema::create('log', function (Blueprint $table) {
  2. $table->uuid('id');
  3. $table->boolean('status');
  4. $table->timestamps();
  5. $table->foreign('id')->references('id')->on('users')->onDelete('cascade');
  6. });

When I run the migrations it shows:

PDOException::("SQLSTATE[HY000]: General error: 1005 Can't create table laravel.log (errno: 150 "Foreign key constraint is incorrectly formed")")

I also tried:

  1. Schema::create('log', function (Blueprint $table) {
  2. $table->uuid('id');
  3. $table->boolean('status');
  4. $table->timestamps();
  5. });
  6. Schema::table('log', function($table) {
  7. $table->foreign('id')
  8. ->references('id')
  9. ->on('users')
  10. ->onDelete('cascade');
  11. });
  1. Schema::create('log', function (Blueprint $table) {
  2. $table->uuid('id')->primary();
  3. $table->foreignUuid('foreign_id');
  4. $table->boolean('status');
  5. $table->timestamps();
  6. });
  7. Schema::table('log', function($table) {
  8. $table->foreign('foreign_id')
  9. ->references('id')
  10. ->on('users')
  11. ->onDelete('cascade');
  12. });

But still not working.

-- I have solved this problem

User

  1. Schema::create('users', function (Blueprint $table) {
  2. $table->uuid('id')->primary();
  3. $table->string('name');
  4. $table->string('email')->unique();
  5. $table->timestamps();
  6. });

log

  1. Schema::create('log', function (Blueprint $table) {
  2. $table->uuid('id')->primary();
  3. $table->foreignUuid('user_id');
  4. $table->boolean('status');
  5. $table->timestamps();
  6. }
  7. Schema::table('log', function($table) {
  8. $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
  9. });
英文:

Those are the following migration files:

User migration

  1. Schema::create('users', function (Blueprint $table) {
  2. $table->uuid('id');
  3. $table->string('name');
  4. $table->string('email')->unique();
  5. $table->timestamps();
  6. });

Log migration

  1. Schema::create('log', function (Blueprint $table) {
  2. $table->uuid('id');
  3. $table->boolean('statu');
  4. $table->timestamps();
  5. $table->foreign('id')->references('id')->on('users')->onDelete('cascade');
  6. });

When I run the migrations it shows:

> PDOException::("SQLSTATE[HY000]: General error: 1005 Can't create table laravel.log (errno: 150 "Foreign key constraint is incorrectly formed")")

I also tried:

  1. Schema::create('log', function (Blueprint $table) {
  2. $table->uuid('id');
  3. $table->boolean('statu');
  4. $table->timestamps();
  5. });
  6. Schema::table('log', function($table) {
  7. $table->foreign('id')
  8. ->references('id')
  9. ->on('users')
  10. ->onDelete('cascade');
  11. });

  1. Schema::create('log', function (Blueprint $table) {
  2. $table->uuid('id')->primary();
  3. $table->foreignUuid('foreign_id');
  4. $table->boolean('statu');
  5. $table->timestamps();
  6. });
  7. Schema::table('log', function($table) {
  8. $table->foreign('foreign_id')
  9. ->references('id')
  10. ->on('users')
  11. ->onDelete('cascade');
  12. });

But still not working.

-- I have solved this problem

User

  1. Schema::create('users', function (Blueprint $table) {
  2. $table->uuid('id')->primary();
  3. $table->string('name');
  4. $table->string('email')->unique();
  5. $table->timestamps();
  6. });

log

  1. Schema::create('log', function (Blueprint $table) {
  2. $table->uuid('id')->primary();
  3. $table->foreignUuid('user_id');
  4. $table->boolean('statu');
  5. $table->timestamps();
  6. });
  7. Schema::table('log', function($table) {
  8. $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
  9. });

答案1

得分: 2

尝试将以下内容添加到您的用户表中:

  1. $table->uuid('id')->primary();

这里的代码告诉数据库将'id'列设置为主键。

然后,您应该将您的外键命名为“表的名称_id”。对于您来说,应该是:

  1. $table->foreignUuid('foreign_id');

最后,您可以添加:

  1. $table->foreignUuid('user_id')->constrained();

完整的代码如下:

  1. Schema::create('users', function (Blueprint $table) {
  2. $table->uuid('id')->primary();
  3. $table->string('name');
  4. $table->string('email')->unique();
  5. $table->timestamps();
  6. });
  7. Schema::create('log', function (Blueprint $table) {
  8. $table->uuid('id');
  9. $table->boolean('statu');
  10. $table->timestamps();
  11. $table->foreignUuid('user_id')->constrained();
  12. });

希望这对您有所帮助。

英文:

Try adding to your users table :

  1. $table->uuid('id')->primary();

Nothing here indicate to you database that id is the primary key.

Then you should call your foreign key as "name_of_the_table"_id.
For you it should be :

  1. $table->foreignUuid('foreign_id');

And finally you can add :

  1. $table->foreignUuid('user_id')->constrained();

The complete code is something like that :

  1. Schema::create('users', function (Blueprint $table) {
  2. $table->uuid('id')->primary();
  3. $table->string('name');
  4. $table->string('email')->unique();
  5. $table->timestamps();
  6. });
  7. Schema::create('log', function (Blueprint $table) {
  8. $table->uuid('id');
  9. $table->boolean('statu');
  10. $table->timestamps();
  11. $table->foreignUuid('user_id')->constrained();
  12. });

答案2

得分: -1

请使用 $table->id(); 而不是 $table->uuid('id');

英文:

Please use $table->id(); instead of $table->uuid('id');

huangapple
  • 本文由 发表于 2023年3月9日 18:13:53
  • 转载请务必保留本文链接:https://go.coder-hub.com/75683173.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定