Многие ко многим на одной и той же сущности Symfony

Я работаю с 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. Любая помощь, пожалуйста ..

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
1 132
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я думаю, что вы пропустили некоторые биты в своем коде. Во-первых, поскольку вы создаете Many-to-Many, это приведет к созданию новой таблицы. Это ваш (пользовательская цель, пользовательский источник). Тогда вы понимаете, что где-то должен быть какой-то массив или способ получить информацию. В 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 вам может понадобиться что-то более сложное, чем просто переменная. Когда будут данные, им нужно наглядное представление, какие-то средства для отображения результатов. Ознакомьтесь со следующими ссылками, чтобы найти некоторые идеи:

Спасибо за ваш ответ ! но я действительно не мог найти решение! Я проверил обе ссылки, но здесь все по-другому. поскольку я хочу, чтобы Many_Many было на том же объекте (Пользователь расширяет BaseUser), я попытался добавить «/ ** * @var \ Doctrine \ Common \ Collections \ Collection | User []» и это в конструкторе «$ this-> users = новый ArrayCollection (); " и тогда я не знал, что еще делать, чтобы отображать для каждого пользователя его друзей. (PS я новичок в Symfony)

Jessi 03.10.2018 03:16

Функция «многие ко многим» реализована с помощью дополнительной таблицы, в которой два столбца «указывают» на связанные сущности. В вашем случае оба столбца указывают на один и тот же объект, то есть на таблицу, что не имеет значения. Дело в том, что я не вижу соединения, то есть отношения к вашей реализации. Я добавляю дополнительную часть в ответ для этой части ORM.

Michael Grivas 03.10.2018 03:27

Другие вопросы по теме