A我有一张与用户的桌子和一张与朋友的桌子,下面是他们的联系:
这在用户类中:
/**
* @ORMOneToMany(targetEntity="Friend", mappedBy="user")
*/
protected $friends;
public function __construct()
{
$this->friends = new ArrayCollection();
}
这是在Friend类中:
/**
* @ORMManyToOne(targetEntity="User", inversedBy="friends")
* @ORMJoinColumn(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();
}
但它显示所有用户的所有好友,而不仅仅是当前用户。有没有一种方法可以只显示当前用户的好友,而不使用类似"WHERE friend.user_id=user.id"的内容?如果是,请告诉我怎么做。
B我想问的另一件事是如何管理我的控制器。
这是呈现模板以显示所有未排序的朋友的操作:
/*
* @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 EMMyFriendsBundleEntityChooseCatType(), $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语句的控制器,但里面有什么?请给我一些想法!提前感谢!
这样做:
/**
* @ORMOneToMany(targetEntity="Friend", mappedBy="user")
* @ORMOrderBy({"name" = "ASC"})
*/
protected $friends;