Symfony — принадлежит к тому же объекту

Я хочу иметь прямую связь между двумя полями сущностей из одной таблицы.

Идея состоит в том, чтобы добавить мою сущность manager_id, которая будет указывать на другого пользователя в пользовательской таблице (я пробовал с OneToOne.

Когда пользователь вызывает действие, user_id, которому, например, отправить сообщение, будет извлечен как

$user->getManager()->getId();

Журнал ошибок говорит:

Сопоставление для идентификатора поля не найдено.

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

   /**
    * @ORM\OneToOne(targetEntity = "App\Entity\User", 
      mappedBy = "id")
    */
   private $manager;

Это называется самореференцией. Примеры есть в документации Doctrine ORM. И я думаю, вы хотите отношения One-To-Many вместо One-To-One. doctrine-project.org/projects/doctrine-orm/en/2.6/reference/‌​…

Jakub Matczak 23.07.2019 12:45
Стоит ли изучать 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 и хотите разрабатывать...
1
1
204
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Простой способ создать такое отношение — использовать ненаправленный тип отношения. Код для него выглядит так:

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

    /**
     * @var User
     *
     * @ORM\ManyToOne(targetEntity = "App\Entity\User")
     */
     private $manager;
}

Теперь вы можете сделать:

/** @var User $user */
$managerId = $user->getManager()->getId();

Надеюсь это поможет.

PS. Я добавил несколько докблоков @var для подсказок.

Я сделал это так же, как вы. Большое спасибо за помощь. @ИгорьВ.

Tommy J 23.07.2019 13:26

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