Доктрина 2, не могу удалить ссылки из БД - PullRequest
1 голос
/ 05 сентября 2011

мой блог имеет 3 сущности следующим образом:

запись:

namespace Entities\Blog;

/**
 * @Entity(repositoryClass="\Entities\Blog\EntryRepository")
 * @Table(name="blog_entry")
 * @HasLifecycleCallbacks
 */
class Entry extends \Entities\AbstractEntity
{
    /**
     * @Id @Column(name="id", type="integer")
     * @GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /** @Column(name="permalink", type="string", length=255) */
    protected $permalink;

    /** @Column(name="title", type="string", length=255) */
    protected $title;

    /** @Column(name="pub_date", type="datetime") */
    protected $pub_date;

    /** @Column(name="content", type="text") */
    protected $content;

    /** @OneToMany(targetEntity="\Entities\Blog\Comment", mappedBy="entry") */
    protected $comments;

     /**
     * @ManyToMany(targetEntity="\Entities\Blog\Category", cascade={"persist", "remove"})
     * @JoinColumn(name="id", referencedColumnName="id",onDelete="SET NULL", onUpdate="SET NULL")
     */
    protected $entrycategories;

    public function addEntry($entry) {
        $this->entrycategories->add($entry);
    }
    public function deleteDiscoverFromCategories($entry) {
        $this->entrycategories->removeElement($entry);
    }
    public function getCategories() {
        $this->entrycategories;
    }


    /** @Column(type="datetime") */
    private $created_at;

    /** @Column(type="datetime") */
    private $updated_at;

    /** @PreUpdate */
    public function updated()
    {
        $this->updated_at = new \DateTime("now");
    }

    public function __construct()
    {
      $this->entrycategories = new \Doctrine\Common\Collections\ArrayCollection();
        $this->comments = new \Doctrine\Common\Collections\ArrayCollection();

        $this->created_at = $this->updated_at = new \DateTime("now");
    }
}

class EntryRepository extends \Entities\PaginatedRepository
{
    protected $_entityClassName = 'Entities\Blog\Entry';
}

Категория прав:

namespace Entities \ Blog;

/**
 * @Entity(repositoryClass="\Entities\Blog\CategoryRepository")
 * @Table(name="blog_Ccategory")
 * @HasLifecycleCallbacks
 */
class Category extends \Entities\AbstractEntity
{
    /**
     * @Id @Column(name="id", type="integer")
     * @GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /** @Column(name="permalink", type="string", length=255) */
    protected $permalink;

    /** @Column(name="cat_title", type="string", length=255) */
    protected $title;
     /** @ManyToMany(targetEntity="\Entities\Blog\Entry", mappedBy="entrycategories", cascade={"all"})
     */
    protected $entries;
    public function __construct()
    {
        $this->comments = new \Doctrine\Common\Collections\ArrayCollection();
        $this->entries = new \Doctrine\Common\Collections\ArrayCollection();
        $this->created_at = $this->updated_at = new \DateTime("now");
    }
}

class EntryRepository extends \Entities\PaginatedRepository
{
    protected $_entityClassName = 'Entities\Blog\Entry';
}

и комментарии:

namespace Entities\Blog;

/**
 * @Entity(repositoryClass="\Entities\Blog\CommentRepository")
 * @Table(name="blog_comment")
 * @HasLifecycleCallbacks
 */
class Comment extends \Entities\AbstractEntity
{
    /**
     * @Id @Column(name="id", type="integer")
     * @GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ManyToOne(targetEntity="\Entities\Blog\Entry")
     * @JoinColumn(name="entry_id", referencedColumnName="id")
     */
    protected $entry;

    /** @Column(name="approved", type="string", length=255) */
    protected $approved;

    /** @Column(name="title", type="string", length=255) */
    protected $title;

    /** @Column(name="content", type="text") */
    protected $content;

    /** @Column(name="pub_date", type="datetime") */
    protected $pub_date;

    /** @Column(type="datetime") */
    private $created_at;

    /** @Column(type="datetime") */
    private $updated_at;

    /** @PreUpdate */
    public function updated()
    {
        $this->updated_at = new \DateTime("now");
    }

    public function __construct()
    {
        $this->created_at = $this->updated_at = new \DateTime("now");
    }
}

class CommentRepository extends \Entities\PaginatedRepository
{
    protected $_entityClassName = 'Entities\Blog\Comment';
}

я могу отлично добавлять комментарии и записи ... итак, теперь я добавил объект категории для категоризации записей и т. Д. Итак, доктрина теперь создала таблицу "многие ко многим", в которую я также могу без проблем добавлять данные. . как это:

 $getEntry = $entryRepo->find(1);     
$getCat= $this->_doctrine->getReference('\Entities\Blog\Category', cat['id']);
        $getEntry->addEntry($getCat);
        $this->em->flush();

работает! ..

но как мне удалить эту запись, которую я сделал для таблицы многие ко многим? Я попробовал все ... я просмотрел документацию по dopctrine 2 и следовал ей, но все равно ничего ... ошибок тоже нет.

я пробовал:

$getCat= $cateRepo->find(1);
$getEntry = $entryRepo->find(1);  
$getEntry->getCategories()->removeElement($getCat);
$this->em->flush();

также пробовал это на объекте категории:

$getCat= $cateRepo->find(1);
$getEntry = $entryRepo->find(1);  
$getCat->entries()->removeElement($getEntry);
$this->em->flush();

каждый раз, когда я загружаю страницу, она не отображает никаких ошибок и не удаляет передний план связи со многими по многим

1 Ответ

1 голос
/ 06 сентября 2011

Согласно документации Doctrine , вам необходимо удалить связь из обеих сущностей. Вы пробовали комбинацию обоих ваших методов? * Т.е. 1003 *

$getCat= $cateRepo->find(1);
$getEntry = $entryRepo->find(1); 

// Remove the Category -> Entry association 
$getCat->entries()->removeElement($getEntry);

// Remove the Entry -> Category association
$getEntry->getCategories()->removeElement($getCat);

// Persist the changes
$this->em->flush();
...