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()
../ vendor / laravel / framework / src / Illuminate / Database / Schema / Grammars / Grammar.php
)Dies ist ein bekanntes Problem in Laravel. Mehr Infos dazu hier .Diese Funktion wird in SQLite nicht unterstützt (siehe hier)
Auch ein Thema , das einen detaillierten Showdown dieses Problems enthält
quelle
Gemäß
http://dev.mysql.com/doc/refman/5.6/en/innodb-foreign-key-constraints.html
$ table-> onDelete ('set null') sollte funktionieren, bevor Sie es versuchen
Wenn es irgendwelche Fehler gibt, wäre das auch hilfreich
quelle
Unter Verwendung von Laravel 4.2 unter MySQL 5.5 mit InnoDB funktioniert onDelete ('set null').
quelle