लारवेल में एक मेज पर उचित onDelete बाधा सेट करने के लिए कैसे पता नहीं कर सकते। (मैं SqLite के साथ काम कर रहा हूँ)
$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
});
मुझे कोई त्रुटि नहीं मिलती है। इसके अलावा, यहां तक कि "कैस्केड" विकल्प भी काम नहीं करता है (केवल गैलरी टेबल पर)। गैलरी हटाने से सभी चित्र हट जाते हैं। लेकिन कवर तस्वीर को हटाना, गैलरी को हटाना नहीं होगा (परीक्षण प्रयोजनों के लिए)।
चूंकि "कैस्केड" को भी ट्रिगर नहीं किया गया है, इसलिए मुझे "सेट नल" समस्या नहीं है।
EDIT (वर्कअराउंड):
इस लेख को पढ़ने के बाद मैंने अपना स्कीमा थोड़ा बदल दिया है। अब, चित्र तालिका में एक "is_cover" सेल है, जो इंगित करता है कि यह चित्र उसके एल्बम पर एक कवर है या नहीं।
मूल समस्या का समाधान अभी भी बहुत सराही जाती है!
->nullable()