繁体   English   中英

Doctrine2-双左联接查询问题

[英]Doctrine2 - double left join query issue

我正在将Symfony v3.4 branchDoctrine

我在将SQL查询转换为Doctrine ORM查询时遇到麻烦。

我有3张桌子。

  • 公司
  • 用户

用户-> 1:1->公司-> 1:1->商店

(Symfony开发人员工具栏报告表中的关联正确建立)。

我想在一个查询中获取与cretain User相对应的Shop数据。

我的SQL,得到结果:

SELECT *
FROM mp2_fos_user as u
LEFT JOIN mp2_firm AS f ON u.id = f.firmUserId
LEFT JOIN mp2_shop AS s ON f.id = s.shopFirmId
WHERE u.id = 1

我的主义ORM查询

$query = $em->createQueryBuilder()
->select('u, f, s')
->from('App:User', 'u')
->leftJoin('u.userFirm WITH u.id = f.firmUserId', 'f')
->leftJoin('f.firmShop WITH f.id = s.shopFirmId', 's')
->where('u.id = :user_id')
->setParameter('user_id', $user_id)
->getQuery();

目前,运行代码会导致错误

[Syntax Error] line 0, col 57: Error: Expected end of string, got 'u'

对我的问题而言,最佳做法是什么?

帮助将不胜感激,谢谢!

UPDATE

尝试:

$query = $em->createQueryBuilder()
->select('s.id')
->from('App:User', 'u')
->leftJoin('u.userFirm WITH f.firmUser = u', 'f')
->leftJoin('f.firmShop WITH s.shopFirm = f', 's')
->where('u.id = :user_id')
->setParameter('user_id', $user_id)
->getQuery();

得到了[Syntax Error] line 0, col 54: Error: Expected end of string, got 'f'

如果您在实体中定义了映射,则无需使用WITH子句;当您要使用其他匹配条件将实体WITH时,可以WITH子句

class User
{
    /**
     * @ORM\YourRelationShipNature(targetEntity="App\Entity\Firm", mappedBy="user")
     */
    private $userFirm;
}

class Firm
{
    /**
     * @ORM\YourRelationShipNature(targetEntity="App\Entity\Shop", mappedBy="firm")
     */
    private $firmShop;
}


class Shop
{
    //.....
}

然后,您可以简单地使用属性来加入实体

$query = $em->createQueryBuilder()
    ->select('u, f, s')
    ->from('App:User', 'u')
    ->leftJoin('u.userFirm', 'f')
    ->leftJoin('f.firmShop', 's')
    ->where('u.id = :user_id')
    ->setParameter('user_id', $user_id)
    ->getQuery();

我正在考虑一些类似的方法(假设实体名称正确):

$query = $em->createQueryBuilder()
    ->select('u, f, s')
    ->from('App:User', 'u')
    ->leftJoin('App:UserFirm f WITH f.firmUser = u')
    ->leftJoin('App:FirmShop s WITH s.shopFirm = f')
    ->where('u.id = :user_id')
    ->setParameter('user_id', $user_id)
    ->getQuery();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM