Используя symfony 2.5 с doctrine, я пытаюсь запустить новую транзакцию для каждого пользователя, поработать с этим пользователем, сохранить некоторые сущности, очистить и зафиксировать все сразу.
Для первого пользователя это работает, Все мои сущности зафиксированы в базе данных, но второй и так далее больше не фиксируются. Команды выполняются, но в базе данных ничего не происходит.
foreach ($users as $user) {
$this->em->getConnection()->beginTransaction();
//Do some stuff
$this->em->persist($user);
//Do some more stuff
$this->em->persist($organisation);
//Do even more stuff
$this->em->persist($account);
try {
$this->em->flush();
$this->em->getConnection()->commit();
} catch (Exception $e) {
$this->em->getConnection()->rollback();
$this->em->close();
throw $e;
}
}/**
* ICM\IPTVManagerBundle\Entity\User
*
* @ORM\Table(name="user")
* @ORM\Entity(repositoryClass="ICM\IPTVManagerBundle\Repository\UserRepository")
*/
class User
{
/**
* @var integer $id
* @ORM\Column(type = "integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy = "AUTO")
*/
protected $id;
/**
* @var string $username
* @ORM\Column(type = "string", length = 45, unique = true)
*/
protected $username;
/**
* @ORM\ManyToOne(targetEntity = "Organisation")
* @ORM\JoinColumn(name = "organisation_id", referencedColumnName = "id")
* @Assert\NotNull(groups = {"viewer"})
*/
protected $organisation;
и пользователь, и организация являются существующими объектами, только учетная запись не является существующим правом и должна быть создана, пользователь и организация должны быть обновлены.
Но … аккаунт не связан с пользователем и организацией. Это отношение сделано вручную, потому что несколько организаций могут иметь учетную запись, и я не желаю создавать учетную запись для каждой организации.
Мне нужно иметь возможность откатить все изменения базы данных, как только возникнет проблема, но я не хочу, чтобы все пользователи обрабатывались, и откатывался от всех пользователей, если есть проблема только с одним из пользователей.
Кто-нибудь может мне помочь?
Задача ещё не решена.
Других решений пока нет …