addSql('ALTER TABLE additional_service ADD position INT DEFAULT 0 NOT NULL'); $this->addSql('ALTER TABLE additional_service ALTER COLUMN position DROP DEFAULT'); // Seed the positions with the ordering the admin overview used before, so nothing changes // visually until someone actually drags a row. $this->addSql(' UPDATE additional_service s JOIN ( SELECT id, ROW_NUMBER() OVER ( PARTITION BY accommodation_id ORDER BY date_from ASC, (price <> 0) ASC, label ASC ) AS rn FROM additional_service ) o ON o.id = s.id SET s.position = o.rn '); } public function down(Schema $schema): void { $this->addSql('ALTER TABLE additional_service DROP position'); } }