J'ai eu le même problème. Corrigé en ajoutant nullable au champ :
Schema::create('table_name', function (Blueprint $table) {
...
$table->integer('some_id')->unsigned()->nullable();
$table->foreign('some_id')->references('id')->on('other_table');
...
});
Notez qu'après la migration, toutes les lignes existantes auront some_id = NULL .
UPD :
Depuis Laravel 7, il existe un moyen plus court de faire la même chose :
$table->foreignId('some_id')->nullable()->constrained();
Il est également très important que nullable va AVANT constrained .
Vous trouverez plus d'informations ici, dans la documentation officielle