@Tesmen
Backend разработчик

Как в Doctrine 2.5 указать связь на non-ID стобец?

Всем доброго времени суток. Разрабатываю несожный сервис на Symfony 3, и залип в создании свзяи между двумя таблицами. Упрощенная схема такова: две сущности: Action-много записей и Status - несколько строк.
Каждый строка Action обязана иметь связь с одним из статусов, и это легко делается через
* @ORM\ManyToOne(targetEntity="\AppBundle\Entity\Status")
     * @ORM\JoinColumn(referencedColumnName="id", nullable=false)

в аннотациях сущности Action. Но у меня стоит задача чуть иная, нужно связать строку из Action с полем `code`
сущности Status. Исходный код приведеный ниже при doctrine:sch:update благополучно лепит БД, которая работает как надо черз ПХПма, но при попытке создать new Action доктрина выбрасывает ошибку Missing value for primary key id on AppBundle\Entity\Status

class Action
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var integer
     *
     * @ORM\ManyToOne(targetEntity="\AppBundle\Entity\Status")
     * @ORM\JoinColumn(referencedColumnName="code", nullable=false)
     */
    private $status;
}

class Status
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(type="integer", unique=true)
     */
    private $code;
}
  • Вопрос задан
  • 1831 просмотр
Пригласить эксперта
Ответы на вопрос 2
@maxloyko
Ответ написан
Комментировать
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Философия доктрины заключается в том, что база данных это деталь реализации, а вы должны проектировать бизнес-сущности, связи между ними и их взаимодействие. База данных в этом случае должна целиком и полностью генериться.

То что вы хотите сделать идет в разрез с философией Doctrine. Организовать подобную связь нельзя. Можно джойнить что угодно с чем угодно в запросах, но не более.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы