php - Doctrine's "options" property in @UniqueConstraint not working -
context
i'm using doctrine version 2.5.0 , have 2 entities: group , item. i'm trying create unique constraint items cannot have same position in group:
/** * @entity * @table(uniqueconstraints={ * @uniqueconstraint(name="position", columns={"group_id", "position"}) * ) */ class item { ... } this works well.
problem
i added active field item entity, instead of deleting item, 'inactivate' it. unique constraint doesn't work anymore, since item stays in database group reference , position.
attempts
looking @ doctrine docs, i've discovered can use options property clause in @uniqueconstraint:
/** * @entity * @table(uniqueconstraints={ * @uniqueconstraint(name="position", columns={"group_id", "position"}, * options={"where":"(active = 1)"})} * ) */ class item { ... } but same error before:
sqlstate[23000]: integrity constraint violation: 1062 duplicate entry '1-1' key 'position'
here deletion code:
$item->setactive(false); $this->_em->persist($item); $this->_em->flush(); foreach ($item->getnextitems() $nextitem) { $nextitem->setposition($nextitem->getposition() - 1); $this->_em->persist($nextitem); } $this->_em->flush(); any idea why options property not working?
update
i realised strange behaviour. every time run command ./doctrine orm:schema-tool:update --force recreates index:
drop index position on item; create unique index position on item (group_id, position); but once remove options property , run command, get:
nothing update - database in sync current entity metadata.
if have data in database , after adding unique constraint first please check in database have unique values or not.
Comments
Post a Comment