Не могу понять, как правильно установить ограничение onDelete для таблицы в Laravel. (Я работаю с 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
});
Ошибок не получаю. Также не работает даже опция "каскад" (только на столе галереи). При удалении галереи удаляются все изображения. Но при удалении обложки галерея не удаляется (в тестовых целях).
Поскольку даже «каскад» не запускается, я не «установил ноль».
РЕДАКТИРОВАТЬ (обходной путь):
После прочтения этой статьи я немного изменил свою схему. Теперь таблица изображений содержит ячейку «is_cover», которая указывает, является ли это изображение обложкой в его альбоме или нет.
Решение исходной проблемы все еще очень ценится!
->nullable()
../ vendor / laravel / framework / src / Illuminate / Database / Schema / Grammars / Grammar.php
)Это известная проблема в Laravel. Подробнее об этом здесь .Эта функция не поддерживается в SQLite, см. Здесь
Также тема , в которой подробно раскрывается эта проблема
источник
В соответствии с
http://dev.mysql.com/doc/refman/5.6/en/innodb-foreign-key-constraints.html
$ table-> onDelete ('set null') должен работать, возможно, попробуйте
Если есть какие-то ошибки, тоже будет полезно
источник
При использовании Laravel 4.2 в MySQL 5.5 с InnoDB работает onDelete ('set null').
источник