Foros del Web » Programando para Internet » PHP » Symfony »

[SOLUCIONADO] Cómo hacer un join de dos entidades relacionadas many to many

Estas en el tema de Cómo hacer un join de dos entidades relacionadas many to many en el foro de Symfony en Foros del Web. Hola a todos, os cuetno mi problema, creo que es una tontería pero se me escapa algo. Tengo dos entidades relacionadas many to many, account.php ...
  #1 (permalink)  
Antiguo 24/09/2013, 00:57
 
Fecha de Ingreso: octubre-2010
Mensajes: 5
Antigüedad: 14 años, 1 mes
Puntos: 0
Pregunta Cómo hacer un join de dos entidades relacionadas many to many

Hola a todos, os cuetno mi problema, creo que es una tontería pero se me escapa algo.
Tengo dos entidades relacionadas many to many, account.php y user.php, os las pego.

Código:
class Account
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;
	
	
  /**
   * Many-To-Many, Unidirectional
   *
   * @var ArrayCollection $idusr
   *
   * @ORM\ManyToMany(targetEntity="\FEB\UserBundle\Entity\User", inversedBy="account")
   */
    private $idusr;


Código:
class User extends BaseUser
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;
	
	/**
	* @var \Doctrine\Common\Collections\ArrayCollection $account
	*
	* @ORM\ManyToMany(targetEntity="\FEB\UserBundle\Entity\Account", mappedBy="idusr")
	*/
	protected $account;
Ahora, en el type de otro bundle quiero sacar en un dropdown las accounts ($account) con un determinado id de usuario ($idusr), haciendo un join de la entidad account y user. Lo hago así:

Código:
->add('idaccount', 'entity', array(
					'class' =>    'FEBUserBundle:Account',
					'property' => 'username',
	 			        'query_builder' => function(EntityRepository $er ) use ($options) {
					return $er->createQueryBuilder('a')
							  ->leftJoin('\FEB\UserBundle\Entity\User', 'u')
							  ->where('u.id = :id')
							  ->setParameter('id', $options['pepe']);
						},
					'empty_value' => 'Selecciona account',
					'multiple' => false))												
					;
El problema es que no hace el join, le ponga el idusr que le pona, siempre me saca todas las accounts de la tabla account, no el join.

Viendo el profile la SQL que realiza es ésta:

Código:
SELECT a0_.id AS id0, a0_.tipoaccount AS tipoaccount1, a0_.idusrsm AS idusrsm2, a0_.username AS username3, a0_.token AS token4, a0_.secrettoken AS secrettoken5 FROM Account a0_ LEFT JOIN feb_user f1_ ON (f1_.id = 1)
Alguien me puede echar una mano?, ni los de stackoverflow me han sabido ayudar.

Última edición por cmaciasg; 24/09/2013 a las 00:59 Razón: Error de typo
  #2 (permalink)  
Antiguo 24/09/2013, 01:21
 
Fecha de Ingreso: octubre-2010
Mensajes: 5
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: Cómo hacer un join de dos entidades relacionadas many to many

Joer, no hay nada como explicar lo que te pasa para dar con la solución.

Mi error es que en el createQuerybuilder, en el leftjoin, creía que había que poner el nombre de la tabla o la entidad, y no, lo que hay que referenciar es el campo que une las dos tablas, en este caso idusr. Es decir:

Código:
->add('idaccount', 'entity', array(
				'class' =>    'FEBUserBundle:Account',
				'property' => 'username',
				'query_builder' => function(EntityRepository $er ) use ($options) {
				          return $er->createQueryBuilder('a')
							  ->leftJoin('a.idusr', 'u')
							  ->where('u.id = :id')
							  ->setParameter('id', $options['pepe']);
		},
				'empty_value' => 'Selecciona account',
				'multiple' => false));

Etiquetas: doctrine2, symfony2
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:43.