A.ユーザーとのテーブルと友達とのテーブルがあり、ここに彼らのつながりがあります。
Userクラスのこれ:
/**
* @ORM\OneToMany(targetEntity="Friend", mappedBy="user")
*/
protected $friends;
public function __construct()
{
$this->friends = new ArrayCollection();
}
これはFriendクラスにあります:
/**
* @ORM\ManyToOne(targetEntity="User", inversedBy="friends")
* @ORM\JoinColumn(name="user_id", referencedColumnName="id")
*/
protected $user;
現在のユーザーの友達を使用してレンダリングするテンプレートがあります
$friends = $user->getFriends();
しかし、今はユーザーの友達を並べ替えることができるようにしたいと思います。この関数を使用してリポジトリクラスを作成しました。
public function findAllOrderedByName()
{
return $this->getEntityManager()
->createQuery('SELECT f FROM EMMyFriendsBundle:Friend f ORDER BY f.name ASC')
->getResult();
}
ただし、現在のユーザーだけでなく、すべてのユーザーのすべての友達が表示されます。「WHEREfriend.user_id=user.id」のようなものを使用せずに、現在のユーザーの友達だけを表示する方法はありますか?はいの場合、その方法を教えてください。
B.もう1つ質問したいのは、コントローラーの管理方法です。
これは、並べ替えられていないすべての友達を表示するためにテンプレートをレンダリングするアクションです。
/*
* @Displays the basic information about all the friends of an user
*/
public function displayAction()
{
$user = $this->get('security.context')->getToken()->getUser();
if($user->getName() === NULL)
{
$name = $user->getUsername();
}
else
{
$name = $user->getName();
}
$this->get('session')->setFlash('hello', 'Hello, '.$name.'!');
$friends = $user->getFriends();
$cat = new Category();
$dd_form = $this->createForm(new \EM\MyFriendsBundle\Entity\ChooseCatType(), $cat);
return $this->render('EMMyFriendsBundle:Home:home.html.twig', array(
'name' => $name, 'friends' => $friends, 'user' => $user,
'dd_form' => $dd_form->createView()));
}
そして、私はsortActionを持っていますが、それを書く方法がわかりません。上記と同じである必要がありますが、行のみです
$friends = $user->getFriends();
に置き換える必要があります
$friends = $em->getRepository('EMMyFriendsBundle:Friend')
->findAllOrderedByName();
しかし、私がそれをコピーすると、それは多くのコードの重複であり、それは愚かです。ifステートメントを含む1つのコントローラーについて考えましたが、何を含める必要がありますか?アイデアを教えてください!前もって感謝します!