2013-03-04 78 views
0

我试图删除使用学说2我的数据库中的注册表,但我得到了如下错误:如何从许多删除注册表一对多的关系 - 学说2

Catchable fatal error: Argument 1 passed to Doctrine\ORM\Mapping\DefaultQuoteStrategy::getJoinTableName() must be an array, null given, called in /home/triangulum/www/pedal/vendor/doctrine/orm/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php on line 1020 and defined in /home/triangulum/www/pedal/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/DefaultQuoteStrategy.php on line 86 

我有3个表:

GRUPO = ID,名字

permissao = ID,名字

grupo_permissao = grupo_id,permissao_id

我的实体来说:

了Grupo:

<?php 

namespace User\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use Doctrine\Common\Collections\ArrayCollection; 


/** 
* @ORM\Entity 
* @ORM\Table(name="grupo") 
* @ORM\Entity(repositoryClass="User\Entity\GrupoRepository") 
*/ 
class Grupo { 



    public function __construct($options=null) { 
     Configurator::configure($this, $options); 
     $this->permissoes = new ArrayCollection(); 
    } 


    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue 
    * @var int 
    */ 
    protected $id; 


    /** 
    * @ORM\Column(type="text") 
    * @var string 
    */ 
    protected $nome; 

    /** 
    * @ORM\ManyToMany(targetEntity="User\Entity\Permissao", mappedBy="grupo", cascade={"remove"}) 
    */ 
    protected $permissoes; 

    public function getPermissoes() 
    { 
     return $this->permissoes; 
    } 

    public function getId() { 
     return $this->id; 
    } 

    public function setId($id) { 
     $this->id = $id; 
    } 

    public function getNome() { 
     return $this->nome; 
    } 

    public function setNome($nome) { 
     $this->nome = $nome; 
    } 


    public function toArray() 
    { 
     return array 
     (
      'id' => $this->getId(), 
      'nome' => $this->getNome() 
     ); 
    } 
} 

?> 

Permissao:

<?php 

namespace User\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use Doctrine\Common\Collections\ArrayCollection; 

/** 
* @ORM\Entity 
* @ORM\Table(name="permissao") 
* @ORM\Entity(repositoryClass="User\Entity\PermissaoRepository") 
*/ 
class Permissao { 



    public function __construct($options=null) { 
     Configurator::configure($this, $options); 
     $this->grupos = new ArrayCollection(); 

    } 


    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue 
    * @var int 
    */ 
    protected $id; 


    /** 
    * @ORM\Column(type="text") 
    * @var string 
    */ 
    protected $nome; 



    /** 
    * @ORM\ManyToMany(targetEntity="User\Entity\Grupo", inversedBy="permissao", cascade={"persist", "remove"}) 
    * @ORM\JoinTable(name="grupo_permissao", 
     * joinColumns={@ORM\JoinColumn(name="permissao_id", referencedColumnName="id")}, 
     * inverseJoinColumns={@ORM\JoinColumn(name="grupo_id", referencedColumnName="id")} 
     *) 
    */ 
    protected $grupos; 

    public function getGrupos() { 
     return $this->grupos; 
    } 
    public function getId() { 
     return $this->id; 
    } 

    public function setId($id) { 
     $this->id = $id; 
    } 

    public function getNome() { 
     return $this->nome; 
    } 

    public function setNome($nome) { 
     $this->nome = $nome; 
    } 


    public function toArray() 
    { 
     return array 
     (
      'id' => $this->getId(), 
      'nome' => $this->getNome() 
     ); 
    } 
} 

?> 

删除:

public function delete($id) 
    { 

     $entity = $this->entityManager->find('User\Entity\Grupo', $id); 

     if($entity) 
     { 
      $this->entityManager->remove($entity); 

      $this->entityManager->flush(); 
      return $id; 
     } 
    } 

我在做什么错?

回答

3

我认为您在manyToMany注释中的mappedByinversedBy属性有问题。他们应该匹配其他实体属性名称,grupospermissoes。试试这个:

/** 
* @ORM\ManyToMany(targetEntity="User\Entity\Permissao", mappedBy="grupos", cascade={"remove"}) 
*/ 
protected $permissoes; 


/** 
* @ORM\ManyToMany(targetEntity="User\Entity\Grupo", inversedBy="permissoes", cascade={"persist", "remove"}) 
* @ORM\JoinTable(name="grupo_permissao", 
* joinColumns={@ORM\JoinColumn(name="permissao_id", referencedColumnName="id")}, 
* inverseJoinColumns={@ORM\JoinColumn(name="grupo_id", referencedColumnName="id")} 
*) 
*/ 
protected $grupos; 
+0

谢谢,它的工作原理! – holydev0tion 2013-03-04 19:35:36