我有两张桌子:联系人和 contactpersonlocale 。
表联系人:
表 contactpersonlocale :
在我的联系人实体中,我有:
/**
* @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;
}
在我的Contactpersonlocale实体中,我有:
/**
* @var \DX\MurisBundle\Entity\Contactperson
*
* @ORM\ManyToOne(targetEntity="DX\MurisBundle\Entity\Contactperson")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="contactpersonID", referencedColumnName="contactpersonID")
* })
*/
private $contactpersonid;
在我的Contactperson存储库中,我有:
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();
}
现在当我像这样循环它们时:
$contactpersonen = $em->getRepository('MurisBundle:Contactperson')->getContactpersonen($locale);
foreach($contactpersonen as $cp)
{
dump($cp->getcontactpersonlocale()->toArray()); die;
}
然后我得到两个personlocale对象,他没有在帐户中使用区域设置(因为你可以看到我做了WHERE locale = ..)。我的语言环境肯定是填充..
这可能是什么问题?
答案 0 :(得分:0)
您必须在查询中使用WITH语句:
$cp = $this->createQueryBuilder('cp')
->select('cp')
->innerJoin('cp.contactpersonlocale', 'cpl', 'WITH', 'cpl.locale = :locale')
->setParameter('locale', $locale);
如果您只想使用locale = $ locale加入Contactpersonlocale。