簡體   English   中英

原則2.1-從集合中刪除

[英]Doctrine 2.1 - Removing from collection

我正在嘗試從上級實體中刪除評論,我記得在我的上一個網站上這樣做,但是現在不起作用。

我的實體-用戶

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;

很好,它可以正常工作,並且我在用戶存儲庫中獲得了所有稱為注釋的集合。

現在,我通常在需要刪除時執行此操作:

$commentToDelete = $this->em->getRepository('Entities\Comments')->findOneById(375);
$userResults = $this->em->getRepository('Entities\Users')->findOneById(23);
$userResults->getComments()->removeElement($commentToDelete);
$this->em->flush();

什么都不會刪除,也不會拋出異常來告訴我它沒有。

我學說也沖洗了它,檢查了數據庫,它仍然在那里。

更新:
在我刪除Element之后,我立即遍歷了用戶id = 23數據集,並且id375的注釋數據不存在...因此它從集合中將其刪除,但未從數據庫中刪除,因此我認為$em->flush()應該這樣做嗎?

請指教
謝謝

您需要使用

$em->remove($commentToDelete);
$em->flush();

由於映射保留在注釋中,因此在刷新之前需要刪除該實體以刪除引用,這會將狀態保存到數據庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM