【问题标题】:INNER JOIN Query + WHERE doesn't workINNER JOIN 查询 + WHERE 不起作用
【发布时间】:2015-03-10 02:27:59
【问题描述】:

我有两个表:contactpersoncontactpersonlocale

联系人

  • contactpersonID(主键)
  • 标签(VARCHAR)

表格contactpersonlocale

  • contactpersonlocaleID(主键)
  • contactpersonID(联系人表的外键)
  • 函数(VARCHAR)
  • 名称(VARCHAR)
  • 语言环境(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;

在我的联系人存储库中,我有:

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 对象,他没有考虑 locale(如你所见,我做了 WHERE locale = ..)。而且我的语言环境肯定是填写的.. .

这可能是什么问题?

【问题讨论】:

  • 查询正确提取所有至少具有您的一个语言环境的合同人员...
  • 我该如何改变这个?
  • 您需要什么?你想从数据库中提取什么?
  • 在我的 contactpersonLocale 中,我有 2 个相同的 conctactpersonID,但它们都有不同的语言环境。现在我想选择 locale = "nl" 的所有联系人。
  • 我建议您选择所有符合您的标准的 contractPersonLocale 实体,以使用和 inversedByrelation 导航 contractPersonentity 数据。让我知道这种方法是否可以在您的情况下完成。希望对您有所帮助

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


【解决方案1】:

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

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

如果您只想加入具有 locale = $locale 的 Contactpersonlocale。

【讨论】:

  • 仍然给我 2 个联系人区域设置.. 他没有考虑区域设置...
  • @nielsv 它在这里工作,你使用什么查询?探查器告诉你什么?
猜你喜欢
  • 2017-12-21
  • 2014-11-19
  • 1970-01-01
  • 1970-01-01
  • 2014-10-19
  • 2012-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多