I have a database Migration in Laravel 8 that goes like this:
class CreateArticlesTable extends Migration
{
public function up()
{
Schema::create('articles', function (Blueprint $table) {
$table->id();
$table->integer('user_id')->unsigned();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->string('title');
$table->string('slug');
$table->text('description');
$table->text('body');
$table->string('imageUrl');
$table->string('tags');
$table->integer('viewCount')->default(0);
$table->integer('commentCount')->default(0);
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('articles');
}
}
But whenever I want to run this, I get this error:
General error: 1005 Can't create table elearning
.articles
(errno: 150 "Foreign key constraint is incorrectly formed")
I don't what the heck is going wrong here, so if you know how to solve this issue, please let me know...
CodePudding user response:
instead of using
$table->integer('user_id')->unsigned();
use
$table->unsignedBigInteger();
laravel uses unsignedBigInteger which is 20 digits and unsignedInteger only takes 11 digits
https://laravel.com/docs/8.x/migrations#foreign-key-constraints
CodePudding user response:
are the engine of the user's table and the articles table the same and it is both InnoDB? MyISAM does not support foreign keys. if it is, is the articles table will create after the user table? if the answer is yes so : is both fields are exact in the same type? I think your user id is autoincremented, if it is, then adds unsigned in foreign key :
$table->foreign('user_id')->unsigned()->references('id')->on('users')->onDelete('cascade');