Sha*_*sin 3 migration laravel laravel-8
我尝试迁移具有外键的表。每次我迁移表时都会产生一个错误,内容如下:
一般错误:1215 无法添加外键约束
这是我的表迁移:
Schema::create('profile_pictures', function (Blueprint $table) {
$table->bigIncrements('id');
$table->bigInteger('user_id')->nullable();
$table->binary('image')->nullable();
$table->timestamps();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
});
Run Code Online (Sandbox Code Playgroud)
这是我的模型:
class ProfilePicture extends Model
{
protected $fillable = [
'user_id',
'image'
];
public function user()
{
$this->belongsTo(User::class, 'user_id', 'id');
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的用户表迁移:
Schema::create('users', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('username');
$table->string('first_name')->nullable();
$table->string('last_name')->nullable();
$table->string('email')->unique();
$table->string('phone')->nullable();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
Run Code Online (Sandbox Code Playgroud)
小智 5
将 user_id col 从 bigInteger 更新为 UnsignedBigInteger,因为 PK 和 FK 需要相同的数据类型和长度。
Schema::create('profile_pictures', function (Blueprint $table) {
$table->bigIncrements('id');
$table->unsignedBigInteger('user_id');
$table->binary('image')->nullable();
$table->timestamps();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
});
Run Code Online (Sandbox Code Playgroud)
我建议遵循约定并使用foreignId()方法和constrained()
示例(来自文档):
Schema::table('posts', function (Blueprint $table) {
$table->foreignId('user_id')->constrained();
});
Run Code Online (Sandbox Code Playgroud)
您可以在此处获取更多详细信息:https://laravel.com/docs/8.x/migrations#foreign-key-constraints
| 归档时间: |
|
| 查看次数: |
17718 次 |
| 最近记录: |