Carlos Robles frikiblog

doctrine: crear asociaciones a través de la id, en lugar del objeto

| 0 comments

Cuando tenemos una entidad asociada a otra: por ejemplo, tenemos estas entidades:

use Doctrine\ORM\Mapping as ORM;
/**
 *  Provincia
 *
 * @ORM\Table(name=" provincia")
 * @ORM\Entity
 */
class  Provincia
{
    /**
     * @var string
     *
     * @ORM\Column(name="nombre", type="string", length=45, nullable=true)
     */
    private $nombre;
//...
}
/**
 * Localidad
 *
 * @ORM\Table(name=" localidad")
 * @ORM\Entity
 */
class  Localidad
{   
    /**
     * @var \ Provincia
     *
     * @ORM\ManyToOne(targetEntity="Provincia")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="provincia_id", referencedColumnName="id")
     * })
     */
    private $provincia;
//..
}

por lo general, si tenemos una localidad, y queremos asociarla a una provincia, necesitariamos tener un objeto de la clase provincia, sacado del repositorio por ejemplo si corresponde a una id que nos llega de un formulario,

$em=$this->getServiceLocator()->get('Doctrine\ORM\EntityManager');
$provincia = $em->getRepository("Provincia")->findOneById($idprovincia);
$localidad->setProvincia($provincia);

Esto se puede volver muy tedioso. Por suerte, tenemos un pequeño atajo:

$localidad->setProvincia($em->getReference('Provincia',$idprovincia ));

que viene siendo lo mismo, pero nos ahorramos un par de pasos, que suele ser un alivio cuando hay mucho intercambio con la base de datos.

Facebook Twitter Linkedin Plusone Digg Delicious Reddit Email

Leave a Reply

Required fields are marked *.