Non riesco a capire come impostare il corretto vincolo onDelete su una tabella in Laravel. (Sto lavorando con SqLite)
$table->...->onDelete('cascade'); // works
$table->...->onDelete('null || set null'); // neither of them work
Ho 3 migrazioni, creando la tabella della galleria:
Schema::create('galleries', function($table)
{
$table->increments('id');
$table->string('name')->unique();
$table->text('path')->unique();
$table->text('description')->nullable();
$table->timestamps();
$table->engine = 'InnoDB';
});
Creazione della tabella delle immagini:
Schema::create('pictures', function($table)
{
$table->increments('id');
$table->text('path');
$table->string('title')->nullable();
$table->text('description')->nullable();
$table->integer('gallery_id')->unsigned();
$table->foreign('gallery_id')
->references('id')->on('galleries')
->onDelete('cascade');
$table->timestamps();
$table->engine = 'InnoDB';
});
Collegamento della tabella della galleria a un'immagine:
Schema::table('galleries', function($table)
{
// id of a picture that is used as cover for a gallery
$table->integer('picture_id')->after('description')
->unsigned()->nullable();
$table->foreign('picture_id')
->references('id')->on('pictures')
->onDelete('cascade || set null || null'); // neither of them works
});
Non ricevo errori. Inoltre, anche l'opzione "cascata" non funziona (solo nella tabella della galleria). L'eliminazione di una galleria elimina tutte le immagini. Ma eliminando l'immagine di copertina, non cancellerà la galleria (a scopo di test).
Dal momento che anche la "cascata" non viene attivata, "imposto null" non è il problema.
MODIFICA (soluzione alternativa):
Dopo aver letto questo articolo ho cambiato un po 'il mio schema. Ora, la tabella delle immagini contiene una cella "is_cover", che indica se questa immagine è o meno una copertina del suo album.
Una soluzione al problema originale è ancora molto apprezzata!
->nullable()