Фильтр symfony2 во многих отношениях
У меня есть объект с именем 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;
}
.
.
.
}
Мне нужно сделать запрос, который дает мне друзей пользователя, имя которого содержит букву "а" и фамилию букву "б" (например. Эти буквы указаны на фильтре в веб-форме).
Я знаю, что могу получить доступ ко всем друзьям зарегистрированного пользователя, используя метод getFriends(), но... как отфильтровать этих друзей?
1 ответ
Вы не можете сделать это с помощью геттеров, вам нужно написать метод репозитория и использовать этот метод для того, чтобы получить именно то, что вы ищете.
class FriendRepository extends EntityRepository
{
public function findByUserAlphabetical(User $user)
{
// do query with alphabetical stuff
return $query = ...
}
}
Тогда по твоей логике
$friends = $friendRepository->findByUserAlphabetical($user);
$user->setFriends($friends);
Кроме того, вы захотите запретить выборку друзей в исходном запросе пользователя, чтобы вы могли установить аннотацию fetch
ленивым
/**
* @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;