2017-01-30 5 views
-1

エンティティでDoctrineを使用する際に問題があります。その質問については以下を参照してください。
私のエンティティ:私は行うには、私のコントローラは、ユーザーの配列として$users定義することであるたいと思い何Doctrine、Symfony3、他のエンティティ配列のエンティティを照会

/** 
* Show the user's friendzone 
* 
* @Route("/friendzone", name="show_friends") 
*/ 
public function showFriendzoneAction() 
{ 

    $friends = $this->getUser()->getFriends(); 
    $users = ??? 

    return $this->render('DevLeaguesBundle:User:show_reduced.html.twig', array(
     'users' => $friends, 
    )); 
} 

class User 
{ 
    // ... 

    /** 
    * @var ArrayCollection 
    * 
    * @ORM\OneToMany(targetEntity="Friend", mappedBy="userB") 
    */ 
    private $friends; 

    // ... 

    /** 
    * Get friends 
    * 
    * @return ArrayCollection 
    */ 
    public function getFriends() 
    { 
     return $this->friends; 
    } 
} 

そして

class Friend 
{ 
    /** 
    * @var string 
    * 
    * @ORM\Column(name="relation", type="string", length=255) 
    */ 
    private $relation; 

    /** 
    * @var int 
    * 
    * @ORM\ManyToOne(targetEntity="User", inversedBy="friendsWithMe") 
    */ 
    private $userA; 

    /** 
    * @var int 
    * 
    * @ORM\ManyToOne(targetEntity="User", inversedBy="friends") 
    */ 
    private $userB; 
} 

そして、私のUserControllerこれを持っています$friendsから取得されました。解決策は非常に簡単かもしれません。

+0

「users」=> $ users –

答えて

0

あなたはUserRepositoryでdql-queryを構築し、結果を配列として取得する必要があります。そうしないと、関係getFriendsを使用してユーザーエンティティから配列コレクションを取得できます。しかし、私はあなたが何人かの関係を使用しない理由を理解していません。その場合、友人はFriendエンティティではなくUserエンティティになります。

+0

私は多対多の関係を使いたいと思っていましたが、2人のユーザー間の関係を保存するために余分なトラフィック(友人)が必要です。 Webでは、OneToManyアプローチを使用することで、この種の問題を解決しました。 –

関連する問題