Symfony2过滤多多关系



我有一个名为User的实体,它具有以下内容:

class User implements UserInterface
{
    /**
     *  @ORMId
     *  @ORMColumn(type="string",length=100)
     **/
    protected $id_user;
    /** @ORMColumn(type="string")
     */
    protected $surname;
    /**
     *  @ORMColumn(type="string",length=50)
    */
    protected $name;
  /** 
     * @var ArrayCollection $friends
     * @ORMManyToMany(targetEntity="UniDocsUserBundleEntityUser")
     * @ORMJoinTable(name="friends",
     *      joinColumns={@ORMJoinColumn(name="friend1", referencedColumnName="id_user")},
     *      inverseJoinColumns={@ORMJoinColumn(name="friend2", referencedColumnName="id_user")}
     *      ) 
    */
    protected $friends; 
.
.
.
/**
     * Get friends
     *
     * @return DoctrineCommonCollectionsCollection 
     */
    public function getFriends()
    {
        return $this->friends;
    }
.
.
.
}

我需要做一个查询,给我一个用户的朋友的名字包含字母'a'和姓氏字母'b'(例如。这些字母是在web表单的过滤器中指定的)。

我知道我可以使用getFriends()方法访问注册用户的所有朋友,但是…如何过滤这些朋友?

您不能使用getter来实现,您需要编写一个存储库方法并使用该方法来获取您正在查找的内容。

class FriendRepository extends EntityRepository
{
    public function findByUserAlphabetical(User $user)
    {
        // do query with alphabetical stuff
        return $query = ...
    }
}

那么在你的逻辑中:

$friends = $friendRepository->findByUserAlphabetical($user);
$user->setFriends($friends);

同样,您将希望防止在原始User查询中获取好友,因此您可以将注释fetch设置为LAZY:

/** 
 * @var ArrayCollection $friends
 * @ORMManyToMany(targetEntity="UniDocsUserBundleEntityUser", fetch="LAZY")
 * @ORMJoinTable(name="friends",
 *      joinColumns={@ORMJoinColumn(name="friend1", referencedColumnName="id_user")},
 *      inverseJoinColumns={@ORMJoinColumn(name="friend2", referencedColumnName="id_user")}
 *      ) 
 */
 protected $friends; 

最新更新