INNER JOIN查询+ WHERE不起作用

时间:2015-01-12 10:37:05

标签: php symfony doctrine-orm inner-join query-builder

我有两张桌子:联系人 contactpersonlocale

联系人

  • contactpersonID(主键)
  • tag(VARCHAR)

contactpersonlocale

  • contactpersonlocaleID(主键)
  • contactpersonID(联系人表的外键)
  • function(VARCHAR)
  • name(VARCHAR)
  • locale(VARCHAR)

在我的联系人实体中,我有:

/**
 * @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 = ..)。我的语言环境肯定是填充..

enter image description here

这可能是什么问题?

1 个答案:

答案 0 :(得分:0)

您必须在查询中使用WITH语句:

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

如果您只想使用locale = $ locale加入Contactpersonlocale。