我正在尝试从父实体中移除注释,我记得在我的上一个网站上执行此操作但现在它无法正常工作..
我的实体 - 用户
namespace Application\Entities;
use Doctrine\ORM\Mapping AS ORM,
Doctrine\Common\Collections\ArrayCollection;
/**
* Loan
*
* @ORM\Table(name="users")
* @ORM\Entity
*/
class Users{
/**
* @var integer $id
*
* @ORM\Column(type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @var string $username
*
* @ORM\Column(type="string", length=45, nullable=false)
*/
private $username;
/**
* @var ArrayCollection
*
* @ORM\OneToMany(targetEntity="Comments", mappedBy="author", cascade={"persist", "remove"})
*/
private $comments;
public function getComments(){
return $this->comments;
}
和我的评论表:
namespace Application\Entities;
use Doctrine\ORM\Mapping AS ORM,
Doctrine\Common\Collections\ArrayCollection;
/**
* Loan
*
* @ORM\Table(name="comments")
* @ORM\Entity
*/
class Comments{
/**
* @var integer $id
*
* @ORM\Column(type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @var integer $user_id
*
* @ORM\Column(type="integer", length=15, nullable=false)
*/
private $user_id
/**
* @var Loan
*
* @ORM\ManyToOne(targetEntity="Users", inversedBy="comments",cascade={"persist"})
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="user_id", referencedColumnName="id")
* })
*/
private $author;
这很好,它可以工作,我在用户存储库中获得了所有名为comments的集合。
现在,我通常在需要删除时执行此操作:
$commentToDelete = $this->em->getRepository('Entities\Comments')->findOneById(375);
$userResults = $this->em->getRepository('Entities\Users')->findOneById(23);
$userResults->getComments()->removeElement($commentToDelete);
$this->em->flush();
没有任何删除,也没有抛出异常告诉我它没有。
我的学说也刷了它,检查了数据库,它仍在那里......
更新
在我删除元素后,我循环访问用户id = 23数据集,并且id375的注释数据不在那里......所以它将它从集合中删除但不是从数据库中删除,我认为$em->flush()
是假设的这样做?
请告知
感谢
答案 0 :(得分:5)
您需要使用
$em->remove($commentToDelete);
$em->flush();
因为映射保留在注释中,所以您需要删除此实体以在刷新之前删除引用,这会将状态保存到db。