Saya memiliki masalah yang sama. Memperbaikinya dengan menambahkan nullable ke bidang:
Schema::create('table_name', function (Blueprint $table) {
...
$table->integer('some_id')->unsigned()->nullable();
$table->foreign('some_id')->references('id')->on('other_table');
...
});
Perhatikan bahwa setelah migrasi semua baris yang ada akan memiliki some_id = NULL .
UPD :
Sejak Laravel 7 ada cara yang lebih singkat untuk melakukan hal yang sama:
$table->foreignId('some_id')->nullable()->constrained();
Juga sangat penting bahwa nullable berjalan SEBELUM constrained .
Info lebih lanjut dapat Anda temukan di sini, di dokumentasi resmi