【发布时间】:2015-03-10 02:27:59
【问题描述】:
我有两个表:contactperson 和 contactpersonlocale。
表联系人:
- 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