INNER JOIN Query + WHERE no funciona

Tengo dos tablas: contactperson y contactpersonlocale .

Persona de contacto de la mesa:

  • contactpersonID (clave principal)
  • etiqueta (VARCHAR)

Tabla contactpersonlocale :

  • contactpersonlocaleID (clave principal)
  • contactpersonID (clave externa para la tabla de contacto)
  • función (VARCHAR)
  • nombre (VARCHAR)
  • locale (VARCHAR)

En mi Entidad Contacto tengo:

/** * @var integer * * @ORM\Column(name="contactpersonID", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="IDENTITY") */ private $contactpersonid; /** * @ORM\OneToMany(targetEntity="DX\MurisBundle\Entity\Contactpersonlocale", mappedBy="contactpersonid", cascade={"persist", "remove", "merge"}, orphanRemoval=true) */ protected $contactpersonlocale; /** * Set contactpersonlocale * * @param \DX\MurisBundle\Entity\Contactpersonlocale $contactpersonlocale * @return Contactpersonlocale */ public function setContactpersonlocale(\DX\MurisBundle\Entity\Contactpersonlocale $contactpersonlocale = null) { $this->contactpersonlocale = $contactpersonlocale; return $this; } /** * Get contactpersonlocale * * @return \DX\MurisBundle\Entity\Contactpersonlocale */ public function getContactpersonlocale() { return $this->contactpersonlocale; } 

En mi Contactpersonlocale Entity tengo:

 /** * @var \DX\MurisBundle\Entity\Contactperson * * @ORM\ManyToOne(targetEntity="DX\MurisBundle\Entity\Contactperson") * @ORM\JoinColumns({ * @ORM\JoinColumn(name="contactpersonID", referencedColumnName="contactpersonID") * }) */ private $contactpersonid; 

En mi Repositorio de contactos tengo:

 public function getContactpersonen($locale = 'nl') { $cp = $this->createQueryBuilder('cp') ->select('cp') ->innerJoin('cp.contactpersonlocale', 'cpl') ->where('cpl.locale = :locale') ->setParameter('locale', $locale); return $cp->getQuery() ->getResult(); } 

Ahora cuando los recorro de esta manera:

 $contactpersonen = $em->getRepository('MurisBundle:Contactperson')->getContactpersonen($locale); foreach($contactpersonen as $cp) { dump($cp->getcontactpersonlocale()->toArray()); die; } 

Luego obtengo dos objetos en escala personal, él no toma en cuenta la configuración regional (como se puede ver, hago WHERE locale = …). Y mi lugar está definitivamente lleno …

enter image description here

¿Cuál podría ser el problema de esto?

Tienes que usar la statement WITH en tu consulta:

 $cp = $this->createQueryBuilder('cp') ->select('cp') ->innerJoin('cp.contactpersonlocale', 'cpl', 'WITH', 'cpl.locale = :locale') ->setParameter('locale', $locale); 

Si desea unirse solo a Contactpersonlocale con locale = $ locale.