много ко многим на одной сущности symfony - PullRequest
0 голосов
/ 03 октября 2018

Я работаю с FOSUserBunde и хочу установить связь ManytoMany с сущностью User.

Я видел этот пост и пытался сделать то же самое.

Так вот мой код

class User extends BaseUser
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\ManyToMany(targetEntity="AppBundle\Entity\User", inversedBy="userfriends")
     */
    private $users;

    /**
     * @ORM\ManyToMany(targetEntity="AppBundle\Entity\User", mappedBy="users")
     */
    private $userfriends;

Когда я запускаюКоманда обновления базы данных Я получил таблицу с user_user с usertarget и usersource

Моя проблема в том, что я хочу отобразить все usersfriends.Любая помощь, пожалуйста ..

1 Ответ

0 голосов
/ 03 октября 2018

Я думаю, что вы пропустили несколько бит в вашем коде.Во-первых, поскольку вы делаете «многие ко многим», это приведет к появлению новой таблицы.Это ваше (usertarget, usersource).Затем вы понимаете, что где-то должен быть какой-то массив или какой-то способ извлечения информации.В SQL ваши собственные ссылки «многие ко многим» для пользователя Джорджа, показывающего всех его друзей, будут выглядеть так:

SELECT F.Id 
   FROM user U 
   JOIN user_user MtM ON U.Id = MtM.usersource
   JOIN user F ON F.Id = MtM.usertarget
  WHERE U.Name = 'George'

Объединения должны каким-то образом дублироваться в коде.Возможно, так:

* @ORM\JoinTable(name="user_user",
*   joinColumns={
*     @ORM\JoinColumn(name="usersource", 
*                     referencedColumnName="userfriends")
*   },
*   inverseJoinColumns={
*     @ORM\JoinColumn(name="usertarget", referencedColumnName="id")
*   }
* )

Ответ во многом зависит от того, что вы подразумеваете под отображать всех друзей пользователя .Для представлений в Symfony вам может понадобиться нечто более сложное, чем просто переменная.Когда появятся данные, им нужно видимое представление, некоторые средства для отображения результатов.Проверьте следующие ссылки для некоторых идей:

...