Оптимистическая блокировка в Doctrine2 не работает для многих со многими

У меня есть сущность User который имеет много-много отношения к ролям. Я пытался реализовать Оптимистическую блокировку, все работает нормально, просто когда я менял роли, он не меняет версию (версию объекта пользователя), это правильное поведение?

class User {
/**
* User's roles.
*
* @ORM\ManyToMany(targetEntity="Role")
*/
private $roles;
...

2

Решение

Механизмы блокировки Doctrine 2 не принимают во внимание ассоциации. Они защищают только от изменений самих объектов. ИМХО, это ожидается, потому что у него нет возможности узнать, какие ассоциации включать, а какие игнорировать. Это не то, что вы хотели бы случиться вслепую во всех ассоциациях.

Теоретически Doctrine 2 могла бы достичь этого, добавив опцию в сопоставления ассоциаций, но в данный момент это просто не поддерживается.

Итак, у вас есть 2 варианта:

  1. Попробуйте реализовать такую ​​функцию, и представьте пиар 🙂
  2. Реализуйте свой собственный оптимистический механизм блокировки, который учитывает эту конкретную связь.
1

Другие решения

Я не пробовал, но я думаю, что это правильное поведение (потому что flush не изменяет сущность User), и нет причины блокировать сущность User — она ​​не изменилась.

0