with relations onetomany one manytomany many fields php doctrine2 relationship many-to-one

php - relations - Doctrine 2-No permitir valor nulo en claves externas de relaciones ManyToOne



symfony 4 onetomany (3)

No pude encontrar un ejemplo XML de cómo hacer esto, así que voy a dejar este fragmento aquí en caso de que alguien más esté buscando esto:

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

El nombre y el nombre de columna de referencia son obligatorios, consulte los documentos: https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/xml-mapping.html#join-column-element

Tengo una relación ManyToOne en una de mis entidades, así:

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; // ... }

Esto genera un esquema de base de datos donde se permite que el campo "customer_id" de la tabla de licencias sea nulo, que es exactamente lo que no quiero.

Aquí hay un código donde creo un registro para demostrar que sí permite valores nulos para los campos de referencia:

$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();

Básicamente, no quiero que se conserve una Licencia sin tener un Cliente asignado. ¿Hay alguna anotación que deba establecerse o simplemente debo solicitar que se pase un objeto de Cliente al constructor de mi Licencia?

El motor de base de datos que uso es MySQL v5.1, y estoy usando Doctrine 2 en una aplicación Symfony2.


Solo publicando porque @ zim32 no dijo dónde debíamos colocar la declaración, así que tuve que hacer una prueba y error.

Yaml:

manyToOne: {field}: targetEntity: {Entity} joinColumn: name: {field} nullable: false referencedColumnName: {id} cascade: [''persist'']