Doctrine 2 ArrayCollection filter method

前端 未结 4 715
遥遥无期
遥遥无期 2020-12-02 10:46

Can I filter out results from an arrayCollection in Doctrine 2 while using lazy loading? For example,

// users = ArrayCollection with User entities containin         


        
相关标签:
4条回答
  • 2020-12-02 10:56

    The Collection#filter method really does eager load all members. Filtering at the SQL level will be added in doctrine 2.3.

    0 讨论(0)
  • 2020-12-02 11:02

    Doctrine now has Criteria which offers a single API for filtering collections with SQL and in PHP, depending on the context.

    https://www.doctrine-project.org/projects/doctrine-orm/en/latest/reference/working-with-associations.html#filtering-collections

    Update

    This will achieve the result in the accepted answer, without getting everything from the database.

    use Doctrine\Common\Collections\Criteria;
    
    /**
     * @ORM\Entity
     */
    class Member {
      // ...
      public function getCommentsFiltered($ids) {
        $criteria = Criteria::create()->where(Criteria::expr()->in("id", $ids));
    
        return $this->getComments()->matching($criteria); 
      }
    }
    
    0 讨论(0)
  • 2020-12-02 11:07

    Your use case would be :

        $ArrayCollectionOfActiveUsers = $customer->users->filter(function($user) {
                            return $user->getActive() === TRUE;
                        });
    

    if you add ->first() you'll get only the first entry returned, which is not what you want.

    @ Sjwdavies You need to put () around the variable you pass to USE. You can also shorten as in_array return's a boolean already:

        $member->getComments()->filter( function($entry) use ($idsToFilter) {
            return in_array($entry->getId(), $idsToFilter);
        });
    
    0 讨论(0)
  • 2020-12-02 11:15

    The Boris Guéry answer's at this post, may help you: Doctrine 2, query inside entities

    $idsToFilter = array(1,2,3,4);
    
    $member->getComments()->filter(
        function($entry) use ($idsToFilter) {
           return in_array($entry->getId(), $idsToFilter);
        }
    ); 
    
    0 讨论(0)
提交回复
热议问题