What would be the easiest way to generate nextval
for some particular sequence with given name?
The annotation solution with specifying
* @ORM\GeneratedValue(strategy="SEQUENCE")
* @ORM\SequenceGenerator(sequenceName="sq_foobar", allocationSize="1", initialValue="1")
doesn't satisfy me, as long as there is some more complex logic involved: in some cases I need to retrieve nextval
, in other - I would go with the value retrieved from another sources (not sequence).
So I hope there is a way to retrieve a sequence nextval manually in entity's constructor.
There are two possibilities getting sequence nextval in Doctrine2:
Use Doctrine ORM SequenceGenerator
Use native SQL
Just in case someone else lands on this question (like I did):
The pull request @Florian mentioned made it into doctrine now. Although documentation seems to still lack any information for the CUSTOM id generator strategy. Only part I found where
CUSTOM
option for IdGenerator is mentioned is at GeneratedValue description. If I missed it, please correct me in the comments.Tough it can easily be implemented. Just create an class extending
Doctrine\ORM\Id\AbstractIdGenerator\AbstractIdGenerator
:Then add it to your
id
description in the doctrine entity configuration (YAML
example):If you use
Annotations
instead of YAML, the entity configuration should look like this (untested):And thats all ;)
Then I think you should implement your own Identitfer Generator.
The easyest would be to override the Doctrine\ORM\Id\SequenceGenerator class to handle your specific case.
You then have to register this generator in the class metadata using Doctrine ORM API.
Some links: http://ranskills.wordpress.com/2011/05/26/how-to-add-a-custom-id-generation-strategy-to-doctrine-2-1/
https://github.com/doctrine/doctrine2/pull/206