@Roquefort

Как написать автогенерацию номера в Doctrina?

Мне необходимо написать автогенерацию номера. Использую доктрину для создания записи.
$contract = new Contracts();
                $contract->exchangeArray($form->getData());
                $contract->setContactId($contactId);
                $contract->setType($type);
                $contract->setCreatedAt($date);
                $this->getEntityManager()->persist($contract);
                $this->getEntityManager()->flush();

как в транзакцию добавить select типа
SELECT MAX(number) as number FROM contracts
Сделать инкремент полученного результата и уже все это только флашить.
Поля number не уникальны. АВТО инкремент поля не получится т.к один договор может занимать несколько строчек в базе с одним номером. Причина того что надо все в одну транзакцию в том, чтоб при одновременном создание двумя-тремя итд людьми контрактов, не создался одинаковый номер у договоров
  • Вопрос задан
  • 254 просмотра
Пригласить эксперта
Ответы на вопрос 1
@novrm
Если вы работаете с Doctrine - у вас должен быть уникальный id типа INT для каждой записи.
А раз есть уникальный id - вы можете поставить ему автоинкремент. Это стандартное решение вашей задачи.
Танцы с бубном - лишнее и вредное.

Ибо...
Если вы внимательно читали руководство к Doctirne - вы не наступите на грабли начинающего, который любое поле берет за уникальное. Любое - нельзя.

28.1.1. Join-Columns with non-primary keys

It is not possible to use join columns pointing to non-primary keys. Doctrine will think these are the primary keys and create lazy-loading proxies with the data, which can lead to unexpected results. Doctrine can for performance reasons not validate the correctness of this settings at runtime but only through the Validate Schema command.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы