我使用的是Symfony 3.4。我本来想使用全局变量,所以我使用了会话。在默认控制器中
public function indexAction(SessionInterface $session)
{
//Some code...
$session->set('uoconnecte', $valeur);
//Some code...
}
我设置了变量,并在另一个控制器中
public function newAction(Request $request, SessionInterface $session){}
我得到了足够的值,因为值的die(dump())
显示了它。但当$em->flush()
出现时,我不知道为什么它试图插入另一个表(TypeUO(,而这个表不是$em->persist(Place)
中提到的表,这样做会得到一个错误:
执行参数为[null,null,null,null]的"INSERT INTO type_u_o(codeTypeUO,libTypeUO、niveutypeUO,typeuo联络_id(VALUES(?,?,?("时发生异常:
SQLSTATE[23000]:完整性约束冲突:1048列"codeTypeUO"不能为null">
我试图清除的实体(LieuRangement(与第二个实体(UniteOrganizationnelle(有关系。
/**
* @ORMManyToOne(targetEntity="AdminBundleEntityUniteOrganisationnelle", cascade={"persist", "remove"})
* @ORMJoinColumn(name="uo_id", referencedColumnName="id",nullable=true)
*/
private $uo;
这是控制器代码的一部分
$em = $this->getDoctrine()->getManager();
$session = $this->get('session');
$uo1 = $session->get('uoconnecte');
$lieuRangement->setUo($uo1);
$em->persist($lieuRangement);
//die(dump($lieuRangement->getUo()->getNomUO()));
$em->flush();
但当我删除会话变量时,它就起作用了。我该如何解决?
感谢您的帮助
通过会话传输$uo1
变量,EntityManager并不知道它。从条令的角度来看,实体不再是"托管的"。因此,EntityManager认为它是一个新实体(即使它有一个主键字段集(,并试图插入它
请看一下https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/cookbook/entities-in-session.html