em->flush 尝试插入到另一个表中并收到错误



我使用的是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

相关内容

  • 没有找到相关文章

最新更新