26 февраля 2013 г.

При выполнении задачи на реализацию корзины, проект-менеджер написал в требованиях реализовать нумерацию заказов начиная от 5000. Проект реализован на Symfony 1.4 и требовалось решить данный вопрос с использованием его же средств.

На помощь нам приходит механизм миграций.

Возможно, данное решение не совсем правильное, но позволило решить "проблему".

Вцелом, все сводится к тому, что нам нужно сгенерировать новую миграцию, самостоятельно написать ее и накатить.

Приступим.

Генерируем миграцию:

./symfony doctrine:generate-migration MigrationNameExample

Исходный код самой миграции будет выглядеть следующим образом:

<?php
class MigrationNameExample extends Doctrine_Migration_Base
{
	public function up() {
		$conn = Doctrine_Manager::getInstance()->getCurrentConnection(); 
		$q = 'ALTER TABLE order AUTO_INCREMENT = 5000'; 
		$r = $conn->execute($q); 
	}

	public function down() {
		$conn = Doctrine_Manager::getInstance()->getCurrentConnection(); 
		$q = 'ALTER TABLE order AUTO_INCREMENT = 1'; 
		$r = $conn->execute($q); 
	}
}

И в конце — накатываем:

./symfony doctrine:migrate

Кстати, если вдруг соберетесь откатывать миграцию — учитывайте, что автоинкремент устанавливается только в том случае, если в таблице максимальный id у поля будет меньше, чем требуемое значение автоинкремента. Собственно, то же самое касается и накатывания миграций.

Автор: Артур Минимулин ⚫ 26 февраля 2013 г.Тэги: php, Symfony, Doctrine, MySQL