我正在使用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()
何时到来,我不知道为什么它试图插入到$em->persist(Place)
中没有提到的另一个表(TypeUO)中,并且这样做会导致错误:
使用参数[null,null,null,null]执行'INSERT INTO type_u_o(codeTypeUO,libTypeUO,niveauTypeUO,typeuoliaison_id)VALUES(?,?,?,?)'时发生异常:
SQLSTATE [23000]:违反完整性约束:1048列'codeTypeUO'不能为空。”
我要刷新的实体(LieuRangement)与第二个实体(UniteOrganisationnelle)有关系。
/**
* @ORM\ManyToOne(targetEntity="AdminBundle\Entity\UniteOrganisationnelle", cascade={"persist", "remove"})
* @ORM\JoinColumn(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();
但是当我删除会话变量时,它起作用了。 我该怎么解决?
感谢您的帮助
答案 0 :(得分:1)
通过在会话中传输$uo1
变量,EntityManager对此一无所知。用“学说”术语来说,该实体不再受“管理”。因此,EntityManager认为这是一个新实体(即使已设置了主键字段),并尝试将其插入。
请看看https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/cookbook/entities-in-session.html