2016-07-12 9 views
0

Symfony2で認識制約の問題があります。私はグループ間の関係を持っています&ロールエンティティ:したがって、グループには必須のロールが必要で、ロールには1つ以上のグループがある場合とない場合があります。したがって、私のaddRoles関数(Groups $ grp)では、グループにロールがあるかどうか毎回チェックしていますので、ロールを割り当てていない場合は、挿入するときしかし、致命的なエラー:symfony 2.7で未定義のメソッドcontains()を呼び出す

私は問題が発生します

PHP Fatal error: Call to undefined method MemberShipManagement\GroupsBundle\Entity\Roles::contains() in /var/www/Project_Console/src/MemberShipManagement/GroupsBundle/Entity/Roles.php on line 118,

クラスグループ:

/** 
    * @var Roles $role 
    * 
    * @ORM\ManyToOne(targetEntity="Roles", inversedBy="groups") 
    * @ORM\JoinColumn(name="role_id", referencedColumnName="id", nullable=false) 
    * 
    * @Assert\Valid() 
    */ 
    protected $role; 

クラスの役割:

/** 
* @var ArrayCollection $groups 
* 
* @ORM\OneToMany(targetEntity="Groups", mappedBy="role", cascade={"remove"}) 
*@Assert\Valid() 
*/ 
protected $groups; 

/** 
* Add group 
* @param Groups $grp 
*/ 
public function addRoles(Groups $grp) { 
    // $grp->setRole($this); 
    if (!$this->groups->contains($grp)) { 
     $this->groups->add($grp); 
    } 
    return $this; 
      } 
    /** 
    * Remove groups 
    * @param Groups $groups 
    */ 
    public function removeRoles(Groups $groups) 
    { 
     if ($this->groups->contains($groups)) { 
      $this->groups->removeElement($groups); 
     } 
     return $this; 
    } 

    public function __construct() 
{ 
    $this->groups = new ArrayCollection(); 
} 

はあなたに感謝:)

答えて

0

を多分に私はチェックしようとすることができますデータfをあなたが得るエラーが$グループは教義で定義されたArrayCollectionとして解釈されていないという事実に由来しているように見えるので、この方法のように、

public function addRoles(Groups $grp) { 
    // $grp->setRole($this); 
    if (!isEmpty($this->groups)){ 
     if (!$this->groups->contains($grp)) { 
      $this->groups->add($grp); 
     } 
    } 
    return $this; 
} 

が含まれて呼び出す前に存在している。(もしそうなら、あなたがいたかもしれませんそこに定義されたメソッド)

http://www.doctrine-project.org/api/common/2.4/class-Doctrine.Common.Collections.ArrayCollection.html

限り、使用している他の例では、メソッドが含まれているとして、この(https://groups.google.com/forum/#!topic/doctrine-user/i6IhBPHALkkのように発見された)あなたのアプローチが含まれて呼ばれることは正しく見えます。

それ以外の場合は、$ roleをprotectedではなくprivateに変更できますか?

+0

非常にありがとうございます:) – Cros

関連する問題