在将symfony 2.5与学说一起使用时,我尝试为每个用户启动一个新事务,与该用户一起工作,保留一些实体并一次刷新并提交所有内容。
对于第一个正在工作的用户,我的所有实体都已提交到数据库,但第二个等等已经不再提交。执行命令,但数据库中没有任何操作。
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;
用户和组织都是现有实体,只有该帐户不是现有权利,需要创建,用户和组织需要更新。
但是......帐户与用户和组织无关。这种关系是手工制作的,因为多个实体可以拥有一个账户,而且我不愿意为每个实体创建一个账户表。
我需要能够在某个地方出现问题时立即回滚所有数据库更改,但我不希望处理所有用户并在仅出现问题时回滚所有用户其中一个用户。
任何人都可以帮助我吗?