При создании новой таблицы в Laravel. Миграция будет сгенерирована как:
$table->bigIncrements('id');
Вместо (в старых версиях Laravel):
$table->increments('id');
При использовании bigIncrements внешний ключ ожидает bigInteger вместо целого числа. Итак, ваш код будет выглядеть так:
public function up()
{
Schema::create('categories', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('title');
$table->string('slug');
$table->bigInteger('parent_id')->unsigned()->default(0);
$table->timestamps();
});
Schema::table('categories', function (Blueprint $table) {
$table->foreign('parent_id')->references('id')->on('categories')->onUpdate('cascade')->onDelete('cascade');
});
}