Доктрина 2 - Запрещать нулевое значение для внешних ключей отношений ManyToOne - PullRequest
51 голосов
/ 26 мая 2011

У меня есть отношения ManyToOne в одной из моих сущностей, например:

class License {
    // ...
    /**
     * Customer who owns the license
     * 
     * @var \ISE\LicenseManagerBundle\Entity\Customer
     * @ORM\ManyToOne(targetEntity="Customer", inversedBy="licenses")
     * @ORM\JoinColumn(name="customer_id", referencedColumnName="id")
     */
    private $customer;
    // ...
}

class Customer {
    // ...
    /**
     * Licenses that were at one point generated for the customer
     * 
     * @var \Doctrine\Common\Collections\ArrayCollection
     * @ORM\OneToMany(targetEntity="License", mappedBy="customer")
     */
    private $licenses;
    // ...
}

При этом создается схема базы данных, в которой поле customer_id таблицы лицензий может иметь значение null, а это именно то, чего я не хочу.

Вот код, где я создаю запись, чтобы доказать, что она действительно допускает нулевые значения для ссылочных полей:

$em = $this->get('doctrine')->getEntityManager();
$license = new License();
// Set some fields - not the reference fields though
$license->setValidUntil(new \DateTime("2012-12-31"));
$license->setCreatedAt(new \DateTime());
// Persist the object
$em->persist($license);
$em->flush();

По сути, я не хочу, чтобы лицензия сохранялась без назначения Клиента. Есть ли какая-то аннотация, которую нужно установить, или мне просто нужно передать объект Customer конструктору моей лицензии?

Я использую ядро ​​базы данных MySQL v5.1, а в приложении Symfony2 я использую Doctrine 2.

Ответы [ 3 ]

69 голосов
/ 26 мая 2011
1 голос
/ 19 декабря 2017

Просто опубликовал, потому что @ zim32 не сказал, куда мы должны поместить заявление, поэтому я должен был сделать метод проб и ошибок.

YAML:

manyToOne:
    {field}:
        targetEntity: {Entity}
        joinColumn:
            name: {field}
            nullable: false
            referencedColumnName: {id}
        cascade: ['persist']
0 голосов
/ 24 июля 2018

Я не смог найти XML пример того, как это сделать, поэтому я собираюсь оставить этот фрагмент здесь на случай, если кто-то еще ищет это:

<many-to-one field="author" target-entity="User">
    <join-column name="author_id" referenced-column-name="id" nullable="false" />
</many-to-one>

имя и имя-столбца-ссылки обязательно, см. Документы: https://www.doctrine -project.org / projects / doctrine-orm / en / 2.6 /reference/xml-mapping.html#join-column-element

...