Doctrine - 反向加入实体symfony

时间:2017-11-15 15:32:19

标签: symfony doctrine-orm dql

我有一个问题。 我正在使用Bundle存储与我公司硬件相关的所有内容(包括每个VM的名称,运行该组件的应用程序等),而我还有另一个将自己的信息添加到这些机器中。第一个叫做CMDB,第二个称为PSI。

PSI Bundle取决于CMDB捆绑包,但相反的是假的。

CMDB包中的一个实体是codeSA,表示应用程序代码。 但是在PSI包中,我想为每个codeSA添加一个Perimeter。周边有多个codeSA。

我希望获得与组件相关的所有信息。我可以毫无问题地获取它的codeSA。但我也希望得到它的外围!我怎么能这样做,因为codeSA不知道它的外围我不能在codeSA实体中与周边建立关系!

我所做的就是在外围使用多种操作,就像这样  :

 /**
 * 
 * @ORM\ManyToMany(targetEntity="G\GMOBundle\Entity\Application")
 * @ORM\JoinTable(name="gmo_psi_perimetre_sa",
 *      joinColumns={@ORM\JoinColumn(name="perimetre_id", referencedColumnName="id")},
 *      inverseJoinColumns={@ORM\JoinColumn(name="codeSA_id", referencedColumnName="id_SYSTEME_APPLICATIF")}
 *      )
 */
private $codeSA;

我正在使用的是querybuilder:

 $qb = $this->createQueryBuilder('a')
        ->join('a.composant','comp')
        ->join('comp.correspondanceApplications', 'corr')
        ->join('corr.systemeApplicatif','cs') //this is the codeSA table
        ->join('GGMOPSIBundle:Perimetre','p','WITH','cs.id = p.codeSA') //i want to get my perimetre

但我得到了

  'codeSA WHERE'附近:错误:无效的PathExpression。期望StateFieldPathExpression或SingleValuedAssociationField。

另外,当我得到我的实体时,我可以去codeSA,如:entuity.composant.correspondanceApplications.systemeApplicatif,但我怎样才能访问外围?

希望我足够清楚。不要犹豫,要求提供更多代码。

谢谢!

0 个答案:

没有答案