[英]Doctrine2 - double left join query issue
我正在将Symfony v3.4 branch
与Doctrine
。
我在将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'
对我的问题而言,最佳做法是什么?
帮助将不胜感激,谢谢!
尝试:
$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.