У меня есть таблица (класс A), которая наследуется от другой таблицы (класс B), поэтому очевидно, что первичный ключ таблицы первичного ключа таблицы A содержит таблицу B. Однако то, что я пытаюсь сделать, это добавить новое поле в таблицу A, которое должно автоматически увеличиваться, а также запускать определенное значение, например. 1000001.
Я попробовал несколько способов добавить это новое поле (столбец) в класс A, но я не могу заставить его работать:
Class A extends B { /** * @var integer * * @ORM\GeneratedValue(strategy="Identity") * @ORM\Column(type="integer") * @ORM\SequenceGenerator(sequenceName="beer_id", allocationSize=1, initialValue=1000001) **/ private $beerIdNumber;
Как я могу заставить этот новый столбец автоматически генерировать значения последовательности и, возможно, сделать его дополнительным столбцом первичного ключа или быть уникальным значением? (моя база данных – MySql)
Из документации Doctrine 2 :
Генератор последовательности может в настоящее время использоваться совместно с Oracle или Postgres и позволяет некоторые дополнительные параметры конфигурации, кроме указания имени последовательности
Казалось бы, для вас все, что вам нужно использовать, это использовать:
Class A extends B { /** * @var integer * @ORM\Id * @ORM\GeneratedValue(strategy="Identity") * @ORM\Column(type="integer") */ private $beerIdNumber;
Также из документации :
@GeneratedValue Определяет, какая стратегия используется для генерации идентификатора для переменной экземпляра, которая аннотируется с помощью @Id. Эта аннотация необязательна и имеет смысл только при использовании в сочетании с @Id.
Если эта аннотация не указана с помощью @Id, то по умолчанию используется стратегия NONE.
ОДНАКО
Композитные клавиши
Doctrine 2 позволяет использовать составные первичные ключи. Однако существуют некоторые ограничения, противоположные использованию одного идентификатора. Использование аннотации @GeneratedValue поддерживается только для простых (не составных) первичных ключей, что означает, что вы можете использовать только составные ключи, если вы сами генерируете значения первичного ключа, прежде чем вызывать EntityManager # persist () для объекта.
Чтобы назначить составной первичный ключ / идентификатор, просто поместите аннотацию маркера @Id во все поля, составляющие первичный ключ.