@Roquefort

Почему Doctrine не записывает передаваемый ей параметр?

Class Employees
 {
 /**
     * Parent UID
     * @var int
     *
     * @ORM\Column(name="parentId", type="integer", nullable=true)
     */
    private $parentId;

    /**
     * Division ID
     * @var int
     *
     * @ORM\Column(name="divisionId", type="integer", nullable=true)
     */
    private $divisionId = "";

    /**
     * Подразделение сотрудника
     * @ORM\OneToOne(targetEntity="Statistic\Entity\Division")
     * @ORM\JoinColumn(name="divisionId", referencedColumnName="id")
     */
    private $division;

    /**
     * Руководитель сотрудника
     * @ORM\OneToOne(targetEntity="Employees\Entity\Employees")
     * @ORM\JoinColumn(name="parentId", referencedColumnName="id")
     */
    private $parent;
}


Когда я делаю
...
$employee->setParentId(4);
$entityManager->persist($employee);
$entityManager->flush();


Все предыдущие свойства записываются в базу данных а в parentId прилетает NULL. Все поломалось когда я сделал @JoinColumn в свойстве parent. И теперь надо сетить объект в parent. Чтоб записался parentId. Может есть возможность, обойтись без передачи объекта, чтоб он записывал именно то, что я сетю в parentId
  • Вопрос задан
  • 170 просмотров
Решения вопроса 1
lexxpavlov
@lexxpavlov
Программист, преподаватель
Уберите поле parentId, и всё заработает. Такое поле в БД сделает доктрина сама, при создании связи между таблицами. Можно оставить это поле в сущности, если так хочется, но устанавливать ассоциацию между записями всё равно нужно полем parent.

Плюс, похоже, у вас ошибка в типе связи в полях parent и division. У вас тип связи OneToOne, то есть, у руководителя может быть только один сотрудник, и в подразделении может быть только один сотрудник. Поставьте тип связи ManyToOne (см. статью).
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Siberteam Томск
До 120 000 ₽
E-Produce Жуковский
от 80 000 до 100 000 ₽
Globaltruck Новосибирск
от 100 000 до 220 000 ₽