英文:
Laravel migration, can't create foreign key
问题
以下是要翻译的内容:
Those are the following migration files:
User migration
Schema::create('users', function (Blueprint $table) {
$table->uuid('id');
$table->string('name');
$table->string('email')->unique();
$table->timestamps();
});
Log migration
Schema::create('log', function (Blueprint $table) {
$table->uuid('id');
$table->boolean('status');
$table->timestamps();
$table->foreign('id')->references('id')->on('users')->onDelete('cascade');
});
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:
Schema::create('log', function (Blueprint $table) {
$table->uuid('id');
$table->boolean('status');
$table->timestamps();
});
Schema::table('log', function($table) {
$table->foreign('id')
->references('id')
->on('users')
->onDelete('cascade');
});
Schema::create('log', function (Blueprint $table) {
$table->uuid('id')->primary();
$table->foreignUuid('foreign_id');
$table->boolean('status');
$table->timestamps();
});
Schema::table('log', function($table) {
$table->foreign('foreign_id')
->references('id')
->on('users')
->onDelete('cascade');
});
But still not working.
-- I have solved this problem
User
Schema::create('users', function (Blueprint $table) {
$table->uuid('id')->primary();
$table->string('name');
$table->string('email')->unique();
$table->timestamps();
});
log
Schema::create('log', function (Blueprint $table) {
$table->uuid('id')->primary();
$table->foreignUuid('user_id');
$table->boolean('status');
$table->timestamps();
}
Schema::table('log', function($table) {
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
});
英文:
Those are the following migration files:
User migration
Schema::create('users', function (Blueprint $table) {
$table->uuid('id');
$table->string('name');
$table->string('email')->unique();
$table->timestamps();
});
Log migration
Schema::create('log', function (Blueprint $table) {
$table->uuid('id');
$table->boolean('statu');
$table->timestamps();
$table->foreign('id')->references('id')->on('users')->onDelete('cascade');
});
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:
Schema::create('log', function (Blueprint $table) {
$table->uuid('id');
$table->boolean('statu');
$table->timestamps();
});
Schema::table('log', function($table) {
$table->foreign('id')
->references('id')
->on('users')
->onDelete('cascade');
});
Schema::create('log', function (Blueprint $table) {
$table->uuid('id')->primary();
$table->foreignUuid('foreign_id');
$table->boolean('statu');
$table->timestamps();
});
Schema::table('log', function($table) {
$table->foreign('foreign_id')
->references('id')
->on('users')
->onDelete('cascade');
});
But still not working.
-- I have solved this problem
User
Schema::create('users', function (Blueprint $table) {
$table->uuid('id')->primary();
$table->string('name');
$table->string('email')->unique();
$table->timestamps();
});
log
Schema::create('log', function (Blueprint $table) {
$table->uuid('id')->primary();
$table->foreignUuid('user_id');
$table->boolean('statu');
$table->timestamps();
});
Schema::table('log', function($table) {
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
});
答案1
得分: 2
尝试将以下内容添加到您的用户表中:
$table->uuid('id')->primary();
这里的代码告诉数据库将'id'列设置为主键。
然后,您应该将您的外键命名为“表的名称_id”。对于您来说,应该是:
$table->foreignUuid('foreign_id');
最后,您可以添加:
$table->foreignUuid('user_id')->constrained();
完整的代码如下:
Schema::create('users', function (Blueprint $table) {
$table->uuid('id')->primary();
$table->string('name');
$table->string('email')->unique();
$table->timestamps();
});
Schema::create('log', function (Blueprint $table) {
$table->uuid('id');
$table->boolean('statu');
$table->timestamps();
$table->foreignUuid('user_id')->constrained();
});
希望这对您有所帮助。
英文:
Try adding to your users table :
$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 :
$table->foreignUuid('foreign_id');
And finally you can add :
$table->foreignUuid('user_id')->constrained();
The complete code is something like that :
Schema::create('users', function (Blueprint $table) {
$table->uuid('id')->primary();
$table->string('name');
$table->string('email')->unique();
$table->timestamps();
});
Schema::create('log', function (Blueprint $table) {
$table->uuid('id');
$table->boolean('statu');
$table->timestamps();
$table->foreignUuid('user_id')->constrained();
});
答案2
得分: -1
请使用 $table->id();
而不是 $table->uuid('id');
。
英文:
Please use $table->id(); instead of $table->uuid('id');
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论