Ang*_*gel 3 doctrine many-to-many query-builder symfony
在多对多的关系中,我遇到了查询构建器的一些麻烦.
我有一个实体公司也有子公司,所以我有:
class Company {
private $id;
/**
* @var ArrayCollection
*
* @ORM\ManyToMany(targetEntity="Company")
* @ORM\JoinTable(name="company_relation",
* joinColumns={
* @ORM\JoinColumn(name="id", referencedColumnName="id")
* },
* inverseJoinColumns={
* @ORM\JoinColumn(name="subcompany", referencedColumnName="id")
* }
* )
*/
private $ChildrenCompany;
[...]
}
Run Code Online (Sandbox Code Playgroud)
然后我试图创建一个查询构建器,它返回已确定子公司的公司(例如子公司的id为5).我试过两种方式:
方法A)
$query->select ('c');
$query->from(MyBundle:Company, 'c');
$query->leftJoin('c.ChildrenCompany','j');
$query->where('j.subcompany = 5');
Run Code Online (Sandbox Code Playgroud)
它不起作用并给我错误:类Application\Sademer\CoreBundle\Entity\Company没有名为子公司的字段或关联
方法B)
$query->select ('c');
$query->from(MyBundle:Company, 'c');
$query->where('j.ChildrenCompany = 5');
Run Code Online (Sandbox Code Playgroud)
它不起作用,并给我错误:无效的PathExpression.期望StateFieldPathExpression或SingleValuedAssociationField.
谢谢!!!;)
sam*_*sou 13
还有另一种不使用join语句的方法,你应该添加以下代码来提取子公司Id = 5的公司
$query->where(':subCompanyId MEMBER OF c.ChildrenCompany');
$query->setParameter("subCompanyId", 5);
Run Code Online (Sandbox Code Playgroud)
而且学说会为你付出艰辛的努力.有一个很好的编码时间!
Luk*_*uke 12
你应该能够检查j.id:
$query->select ('c');
$query->from(MyBundle:Company, 'c');
$query->leftJoin('c.ChildrenCompany','j');
$query->where('j.id = :subCompanyId');
$query->setParameter("subCompanyId", 5);
Run Code Online (Sandbox Code Playgroud)
如果您查看第一次出现的错误,您可以看到您有一个公司实例,这意味着您应该查询公司字段.当您加入别名时,您将针对目标实体而不是连接表编写查询.
| 归档时间: |
|
| 查看次数: |
21253 次 |
| 最近记录: |