0

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つのコントローラーについて考えましたが、何を含める必要がありますか?アイデアを教えてください!前もって感謝します!

4

1 に答える 1

2

これを行う:

/**
 * @ORM\OneToMany(targetEntity="Friend", mappedBy="user")
 * @ORM\OrderBy({"name" = "ASC"})
 */
protected $friends;
于 2012-08-29T09:43:55.513 に答える