Không thể tìm ra cách đặt ràng buộc onDelete thích hợp trên một bảng trong Laravel. (Tôi đang làm việc với SqLite)
$table->...->onDelete('cascade'); // works
$table->...->onDelete('null || set null'); // neither of them work
Tôi có 3 lần di chuyển, tạo bảng thư viện:
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';
});
Tạo bảng ảnh:
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';
});
Liên kết bảng thư viện với một hình ảnh:
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
});
Tôi không nhận bất kỳ lỗi nào. Ngoài ra, ngay cả tùy chọn "thác nước" cũng không hoạt động (chỉ trên bàn thư viện). Xóa thư viện sẽ xóa tất cả ảnh. Nhưng xóa ảnh bìa, sẽ không xóa thư viện (với mục đích thử nghiệm).
Vì ngay cả "thác" không được kích hoạt, tôi "đặt null" không phải là vấn đề.
CHỈNH SỬA (giải pháp thay thế):
Sau khi đọc bài viết này, tôi đã thay đổi lược đồ của mình một chút. Bây giờ, bảng ảnh chứa ô "is_cover", cho biết ảnh này có phải là ảnh bìa trong album của nó hay không.
Một giải pháp cho vấn đề ban đầu vẫn được đánh giá cao!
->nullable()