Laravel'de bir tabloda uygun onDelete kısıtlamasının nasıl ayarlanacağını çözemiyorum. (SqLite ile çalışıyorum)
$table->...->onDelete('cascade'); // works
$table->...->onDelete('null || set null'); // neither of them work
Galeri tablosunu oluştururken 3 taşımam var:
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';
});
Resimler tablosunun oluşturulması:
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';
});
Galeri tablosunu bir resme bağlamak:
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
});
Herhangi bir hata almıyorum. Ayrıca, "basamaklı" seçeneği bile çalışmaz (yalnızca galeri tablosunda). Bir galerinin silinmesi tüm resimleri siler. Ancak kapak resmini silmek galeriyi silmeyecektir (test amaçlı).
"Basamaklama" bile tetiklenmediğinden, sorun "null ayarladım" değil.
DÜZENLE (geçici çözüm):
Bu makaleyi okuduktan sonra şemamı biraz değiştirdim. Şimdi, resimler tablosu, bu resmin albümünde bir kapak olup olmadığını gösteren bir "is_cover" hücresi içerir.
Orijinal soruna bir çözüm hala çok takdir edilmektedir!
->nullable()