doctrine / orm

Doctrine Object Relational Mapper (ORM)
https://www.doctrine-project.org/projects/orm.html
MIT License
9.94k stars 2.52k forks source link

Using two sequences in the same table #6422

Open sc0rp10 opened 7 years ago

sc0rp10 commented 7 years ago

I need to handle two sequences for the same table like this:

class Foo
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="SEQUENCE")
     * @SequenceGenerator(sequenceName="a_seq")
     */
    private $a;

    /**
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="SEQUENCE")
     * @SequenceGenerator(sequenceName="b_seq")
     */
    private $b;
}

But insert has failed with not null violation on "b". A query looks like INSERT INTO foo (a, b) VALUES (42, null). My DDL allow usingDEFAULT nextval('b_seq'::regclass);, but Doctrine pass null explicit and breaks query. How can I avoid them?

Ocramius commented 7 years ago

This is not supported, as the ORM will only read a single insert identifier each time. It's a known limitation, and it also isn't possible to mix auto-incremental/sequence fields with assigned fields at the moment.

sc0rp10 commented 7 years ago

Maybe is there some hack with metadata or another 'hacky' way to use them?

Ocramius commented 7 years ago

@sc0rp10 no, the limitation is in the persisters

Majkl578 commented 7 years ago

This should be possible in develop (maybe not just yet, but the code is ready for this) -- thus adding to 3.0 backlog and removing wontfix, and we shall see how this goes. :)