如何使用Doctrine ArrayCollection的所有方法?

时间:2014-06-11 09:07:09

标签: symfony doctrine-orm doctrine

有人可以展示使用Doctrine\Common\Collections\ArrayCollectionforAll方法吗?

2 个答案:

答案 0 :(得分:12)

这很简单。您链接的类以下列方式实现forAll方法:

foreach ($this->_elements as $key => $element) {
     if ( ! $p($key, $element)) {
         return false;
     }
}

因此,基于此,您应该调用forAll之类的:

$collection = ... #some data

$collection->forAll(function($key, $item){
    // Your logic here, based on $key and $item
});

希望这有帮助......

编辑(示例):

  • 您有一个实体Student的对象,其中有OneToMany个学生的分数。
  • 您想检查学生是否已通过所有他/她选出的科目

    $student = ....
    $allPassed = $student->getMarks()->forAll(function($key, $mark){
        return $mark->getValue() != 'F';
    });
    

$allPassed如果所有商标都是' A' B',' C'或者' D'。即使其中一个是TRUE,如果它是F

答案 1 :(得分:4)

我想强调,只要内部函数返回 false ,forAll方法就会退出。

以Perovic为例,假设$ student有10个分数,其中只有一个是'F'。

如果'F'标记是数组的第10个元素,则为该函数     $mark->getValue()  将被调用10次。 另一方面,如果'F'标记是数组的第一个元素,$mark->getValue()将仅被调用一次,因为该函数立即返回false,并且forAll方法停止评估。