jueves, 10 de octubre de 2013

Relación OneToMany (Uno a muchos) en Doctrine2 usando anotaciones

Digamos que tenemos un cliente que hará muchos pedidos, entonces en nuestra entidad Cliente:

// src/Petramas/MainBundle/Entity/Cliente.php

// ...
use Doctrine\Common\Collections\ArrayCollection;

class Cliente
{
    // ...

    /**
     * @ORM\OneToMany(targetEntity="Pedido", mappedBy="cliente")
     */
    protected $pedidos;

    public function __construct()
    {
        $this->pedidos = new ArrayCollection();
    }
}


Y en la entidad Pedido:

// src/Petramas/MainBundle/Entity/Pedido.php

// ...
class Pedido
{
    // ...

    /**
     * @ORM\ManyToOne(targetEntity="Cliente", inversedBy="pedidos")
     * @ORM\JoinColumn(name="cliente_id", referencedColumnName="id")
     */
    protected $cliente;
}

Para generar los getters y setters de las relaciones creadas, para todas las entidades:

php app/console doctrine:generate:entities Petramas

Finalmente para pasar las entidades a tablas en nuestra base de datos:

php app/console doctrine:database:create
php app/console doctrine:schema:create