Php Doctrine2-双左连接查询问题
我正在使用Php Doctrine2-双左连接查询问题,php,symfony,doctrine-orm,doctrine,symfony-3.4,Php,Symfony,Doctrine Orm,Doctrine,Symfony 3.4,我正在使用symfonyv3.4分支和原则 我在将SQL查询转换为ORM查询时遇到问题 我有三张桌子 商店 坚定的 使用者 用户-->1:1-->公司-->1:1-->车间 (Symfony developer工具栏报告表中的关联是否正确) 我想在一次查询中获得与cretainUser对应的Shop数据 我的SQL,得到一个结果: SELECT * FROM mp2_fos_user as u LEFT JOIN mp2_firm AS f ON u.id = f.firmUserId LE
symfonyv3.4分支
和原则
我在将SQL查询转换为ORM查询时遇到问题
我有三张桌子
- 商店
- 坚定的
- 使用者
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
我的查询
$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]第0行第57列:错误:应为字符串结尾,得到“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();
Get
[语法错误]第0行,第54列:错误:预期字符串结尾,Get'f'
我想了一些与此类似的东西(假设实体名称正确):
如果您在实体中定义了映射,则无需使用
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();
如果
mp2\u公司
实体通过属性firmUser
与mp2\u fos\u用户
实体存在关系,则尝试with语句,如with f.firmUser=u
。与firmShop
@geoB的想法相同谢谢您的建议。不幸的是,这个问题依然存在。我更新了问题以反映这一点。虽然错误略有改变…感谢您的想法,但您的示例会导致错误。
$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();