38 votos

¿Al insertar una entidad con asociaciones, hay una manera de usar sólo el FK en vez de recuperar la entidad?

Necesito insertar una entidad que cuenta con asociaciones.

¿Si ya tengo el FK de las entidades asociadas, hay una forma de insertar la principal entidad en la db con sólo el FK de poblados?

O siempre tiene que

  • recuperar las entidades asociadas a través de la FK,
  • rellenar las propiedades de la entidad principal a las asocaciones,
  • y a continuación invocar el método persist.

64voto

timdev Puntos 25910

Quieres una referencia de proxy

Digamos que tengo Puestos y Etiquetas. Un Post hasMany Etiquetas. Tengo un montón de etiquetas del usuario, quien verificó un grupo de casillas de verificación.

El siguiente podría añadir etiquetas existentes en un post, sin ir a buscar cada etiqueta de la entidad en primer lugar. Esto se hace mediante el uso de referencia a servidores proxy generado por EntityManager::getReference():

$tag_ids = $_POST['tag_id']; // an array of integers representing tag IDs.
$post = $em->getRepository('Post')->find($post_id); // returns a Post entity.

foreach($tags_ids as $tid){
   $post->addTag($em->getReference('Tag',$tid));
}
$em->persist($post);
$em->flush();

4voto

MarkOfSine Puntos 145

En lo que respecta a la utilización de una referencia proxy
En mis investigaciones esta es sólo parte de la solución, de la siguiente manera:

Sí, usted no tiene que pro-activamente recuperar los registros relacionados (porque crea un proxy de registro), pero al ras (commit) la transacción de actualización del todavía primer ejecuta una instrucción select para recuperar los registros relacionados y, a continuación, sólo se realiza la actualización (todos en un hit a la db).
Esto es ineficiente y no debe ser necesario (tenemos el extranjero-id de la clave, ¿por qué recuperar el registro..?)

Así que aunque no es una solución completa, lo que logran es sólo una única conexión a la base de datos (que es buena) y ligeramente simplificado código.

No estoy seguro de si hay una solución para esto por el momento...??
Esperemos que la doctrina juntas directivas, se actualizará en el futuro y si el uso del proxy lógica que debería obtener una automática de la mejora del rendimiento...

0voto

Cobby Puntos 2396

Se debe recuperar la entidad para relacionarse y la hacen de la relación.

Supongo que usted podría especificar manualmente la relación accediendo directamente a la base de datos a través de la capa DBAL pero no no recomendamos esto, ni tienen lo probé.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X