Ich kann nicht herausfinden, wie die richtige onDelete-Einschränkung für eine Tabelle in Laravel festgelegt wird. (Ich arbeite mit SqLite)
$table->...->onDelete('cascade'); // works
$table->...->onDelete('null || set null'); // neither of them work
Ich habe 3 Migrationen, die die Galerietabelle erstellen:
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';
});
Erstellen der Bildtabelle:
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';
});
Verknüpfen der Galerietabelle mit einem Bild:
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
});
Ich erhalte keine Fehler. Auch die Option "Kaskade" funktioniert nicht (nur für den Galerietisch). Durch Löschen einer Galerie werden alle Bilder gelöscht. Wenn Sie jedoch das Titelbild löschen, wird die Galerie nicht gelöscht (zu Testzwecken).
Da auch die "Kaskade" nicht ausgelöst wird, ist "Null setzen" nicht das Problem.
BEARBEITEN (Problemumgehung):
Nachdem ich diesen Artikel gelesen habe, habe ich mein Schema ein wenig geändert. Jetzt enthält die Bildtabelle eine "is_cover" -Zelle, die angibt, ob dieses Bild ein Cover auf seinem Album ist oder nicht.
Eine Lösung für das ursprüngliche Problem wird immer noch sehr geschätzt!
->nullable()