লারাভেলের কোনও টেবিলে কীভাবে যথাযথ অন ডিলিট সীমাবদ্ধতা সেট করবেন তা নির্ধারণ করতে পারছেন না। (আমি স্ক্লাইটের সাথে কাজ করছি)
$table->...->onDelete('cascade'); // works
$table->...->onDelete('null || set null'); // neither of them work
গ্যালারী টেবিল তৈরি করে আমার কাছে 3 টি মাইগ্রেশন রয়েছে:
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';
});
ছবির টেবিল তৈরি করা:
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';
});
একটি ছবির সাথে গ্যালারী টেবিলের লিঙ্ক:
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
});
আমি কোনও ত্রুটি গ্রহণ করি না। এছাড়াও, "ক্যাসকেড" বিকল্পটিও কাজ করে না (কেবল গ্যালারী টেবিলের উপরে)। একটি গ্যালারী মোছা সমস্ত ছবি মুছে দেয়। তবে কভার ছবি মুছে ফেলা, গ্যালারীটি (পরীক্ষার উদ্দেশ্যে) মুছবে না।
যেহেতু "ক্যাসকেড "টিও ট্রিগার করা হয়নি, তাই আমি" সেট নাল "সমস্যা নয়।
সম্পাদনা (কার্যনির্বাহী):
এই নিবন্ধটি পড়ার পরে আমি আমার স্কিমাটি কিছুটা পরিবর্তন করেছি। এখন, ছবিগুলির সারণিতে একটি "is_cover" সেল রয়েছে যা নির্দেশ করে যে এই ছবিটি তার অ্যালবামের একটি কভার কিনা or
মূল সমস্যার একটি সমাধান এখনও অত্যন্ত প্রশংসা করা হয়!
->nullable()