Tidak tahu cara menyetel batasan onDelete yang tepat pada tabel di Laravel. (Saya bekerja dengan SqLite)
$table->...->onDelete('cascade'); // works
$table->...->onDelete('null || set null'); // neither of them work
Saya memiliki 3 migrasi, membuat tabel galeri:
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';
});
Membuat tabel gambar:
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';
});
Menautkan tabel galeri ke gambar:
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
});
Saya tidak menerima kesalahan apapun. Selain itu, bahkan opsi "kaskade" tidak berfungsi (hanya di tabel galeri). Menghapus galeri akan menghapus semua gambar. Tetapi menghapus gambar sampul, tidak akan menghapus galeri (untuk tujuan pengujian).
Karena bahkan "cascade" tidak dipicu, saya "set null" bukanlah masalah.
EDIT (solusi):
Setelah membaca artikel ini, saya sedikit mengubah skema saya. Sekarang, tabel gambar berisi sel "sampul_is", yang menunjukkan apakah gambar ini adalah sampul di albumnya atau bukan.
Solusi untuk masalah asli masih sangat dihargai!
->nullable()