@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
  • Вопрос задан
  • 159 просмотров
Решения вопроса 1
lexxpavlov
@lexxpavlov
Программист, преподаватель
Уберите поле parentId, и всё заработает. Такое поле в БД сделает доктрина сама, при создании связи между таблицами. Можно оставить это поле в сущности, если так хочется, но устанавливать ассоциацию между записями всё равно нужно полем parent.

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

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

Войти через центр авторизации
Похожие вопросы