我有以下两个实体:
<?php
namespace Site\AnnonceBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Site\UserBundle\Entity\User;
/**
* Site\AnnonceBundle\Entity\Sujet
*
* @ORM\Table()
* @ORM\Entity(repositoryClass="Site\AnnonceBundle\Entity\SujetRepository")
*/
class Sujet
{
/**
* @var integer $id
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
//Some code...
/**
*
* @ORM\ManyToOne(targetEntity="Site\UserBundle\Entity\User")
*/
private $user;
//getter/setter....
用户实体(FOSUserBundle):
<?php
namespace Site\UserBundle\Entity;
use FOS\UserBundle\Entity\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table()
*
*/
class User extends BaseUser{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
public function getId() {
return $this->id;
}
}
当我创建一个“Sujet”时,我制作了(在SujetController.php中):
$em = $this->getDoctrine()->getEntityManager();
$sujet->setResolu(false);
$em->persist($sujet);
$em->flush();
它的作品,但数据库中插入的“Sujet”引用用户null ...所以在第二个版本中我做了这个:
$em = $this->getDoctrine()->getEntityManager();
$sujet->setResolu(false);
$sujet->setUser(new User($this->get('session')->get('user_id'))) ;//the user is already in the DB
$em->persist($sujet);
$em->flush();
但是我收到了这个错误:
A new entity was found through the relationship 'Site\AnnonceBundle\Entity\Sujet#user' that was not configured to cascade persist operations for entity: . Explicitly persist the new entity or configure cascading persist operations on the relationship. If you cannot find out which entity causes the problem implement 'Site\UserBundle\Entity\User#__toString()' to get a clue.
我不明白,我已经使用过另一个ORM(JPA)并且它以这种方式工作...... 如何告诉“Sujet”有关与数据库中已存在的实体相关的内容?
(对不起,如果我的英语不好)
编辑:它对我有用:
$user = $this->get('security.context')->getToken()->getUser();
$sujet->setUser($user);
$em->persist($sujet);
$em->flush();
答案 0 :(得分:2)
以防万一,错误来自于您创建了一个新用户并将其链接到sujet而没有持久化的事实(因为没有级联,实体被链接到一个没有持久化的实体,导致错误)。
您的编辑建议您找到一种方法来获取当前用户(这个用户是持久的,与之前的“新用户”不同)。
你也可以做到:
$repository = $this->getDoctrine()
->getEntityManager()
->getRepository('YourBundle:User');
$user = $repository->find($iduser);
$sujet->setUser($user);
如果您想“为其他用户”进行编辑,那将是一个很好的解决方案。