Doctrine2 - 如何限制@OneToMany映射大小?

时间:2012-04-04 09:32:01

标签: symfony doctrine-orm entity-relationship one-to-many

我想知道是否有任何方法可以在Doctrine2中设置@OneToMany关系大小的约束。

假设我有两个课程:UserToy

class User{
    ...
    /**
     * @OneToMany(targetEntity="Toy", mappedBy="user")
     */
    public $toys;
    ...
}
class Toy{
    ...
    /**
     * @ManyToOne(targetEntity="User", inversedBy="toys")
     */
    public $user;
    ...
}

我想强迫每个用户最多拥有3个玩具。你知道是否有办法通过使用任何Doctrine2注释来实现这个目的吗?

如果通过注释无法实现,你会怎么做?

谢谢!

1 个答案:

答案 0 :(得分:6)

class User {
 [..]
 public function addToy (Toy $toy)
 {
   if(count($this->toys) >= 3 && !$this->toys->contains($toy)) {
     throw new User\ToyLimitExceededException(
       'At most 3 toys are allowed per user, tried to add another!'
     );
   }
   $this->toys->add($toy);
   $toy->setUser($this);
   return $this;
 }
 [..]
}