我有一个名为User的实体,其中包含以下内容:
class User implements UserInterface
{
/**
* @ORM\Id
* @ORM\Column(type="string",length=100)
**/
protected $id_user;
/** @ORM\Column(type="string")
*/
protected $surname;
/**
* @ORM\Column(type="string",length=50)
*/
protected $name;
/**
* @var ArrayCollection $friends
* @ORM\ManyToMany(targetEntity="UniDocs\UserBundle\Entity\User")
* @ORM\JoinTable(name="friends",
* joinColumns={@ORM\JoinColumn(name="friend1", referencedColumnName="id_user")},
* inverseJoinColumns={@ORM\JoinColumn(name="friend2", referencedColumnName="id_user")}
* )
*/
protected $friends;
.
.
.
/**
* Get friends
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getFriends()
{
return $this->friends;
}
.
.
.
}
我需要进行一个查询,向我提供一个用户的朋友,该用户的名字包含字母' a'和姓氏字母' b' (例如,这些字母是在网络表单的过滤器上指定的。)
我知道我可以使用getFriends()方法访问注册用户的所有朋友,但是...如何过滤这些朋友?
答案 0 :(得分:0)
你不能使用getter做到这一点,你需要编写一个存储库方法并使用该方法来获取你正在寻找的内容。
class FriendRepository extends EntityRepository
{
public function findByUserAlphabetical(User $user)
{
// do query with alphabetical stuff
return $query = ...
}
}
然后在你的逻辑中:
$friends = $friendRepository->findByUserAlphabetical($user);
$user->setFriends($friends);
此外,您还希望阻止在原始用户查询中提取朋友,这样您就可以将注释fetch
设置为LAZY:
/**
* @var ArrayCollection $friends
* @ORM\ManyToMany(targetEntity="UniDocs\UserBundle\Entity\User", fetch="LAZY")
* @ORM\JoinTable(name="friends",
* joinColumns={@ORM\JoinColumn(name="friend1", referencedColumnName="id_user")},
* inverseJoinColumns={@ORM\JoinColumn(name="friend2", referencedColumnName="id_user")}
* )
*/
protected $friends;