从相关表中排序信息 - Symfony2

时间:2012-08-29 09:33:33

标签: database symfony doctrine-orm

A。我有一个包含用户的桌子和一张有朋友的桌子,这是他们的联系:

这是用户类:

    /**
     * @ORM\OneToMany(targetEntity="Friend", mappedBy="user")
     */
    protected $friends;

public function __construct()
    {
        $this->friends = new ArrayCollection();
    }

,这是在朋友类:

/**
 * @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();
    }

但它显示所有用户的所有朋友,而不仅仅是当前用户。有没有办法只显示当前用户的朋友而不使用“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 \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 个答案:

答案 0 :(得分:2)

这样做:

/**
 * @ORM\OneToMany(targetEntity="Friend", mappedBy="user")
 * @ORM\OrderBy({"name" = "ASC"})
 */
protected $friends;