No puedo averiguar cómo establecer la restricción onDelete adecuada en una tabla en Laravel. (Estoy trabajando con SqLite)
$table->...->onDelete('cascade'); // works
$table->...->onDelete('null || set null'); // neither of them work
Tengo 3 migraciones, creando la tabla de la galería:
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';
});
Creando la tabla de imágenes:
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';
});
Vinculación de la tabla de la galería a una imagen:
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
});
No recibo ningún error. Además, incluso la opción "cascada" no funciona (solo en la tabla de la galería). Eliminar una galería elimina todas las imágenes. Pero eliminar la imagen de portada no eliminará la galería (con fines de prueba).
Dado que incluso la "cascada" no se activa, "establecer nulo" no es el problema.
EDITAR (solución alternativa):
Después de leer este artículo , cambié un poco mi esquema. Ahora, la tabla de imágenes contiene una celda "is_cover", que indica si esta imagen es una portada de su álbum o no.
¡Aún se agradece mucho una solución al problema original!
->nullable()