【问题标题】:transform SQL to createQueryBuilder将 SQL 转换为 createQueryBuilder
【发布时间】:2021-04-11 08:53:14
【问题描述】:

我正在尝试转换这个 sql

 SELECT * FROM user_account
 LEFT JOIN brand ON user_account.id = brand.user_id_id
 LEFT JOIN influencer ON user_account.id = influencer.user_id_id'

对于 createQueryBuilder,我尝试了这个,但它不起作用

$qb = $this->createQueryBuilder('u')
    ->from(Brand::class, 'brand')
    ->from(Influencer::class, 'influencer')
    ->leftJoin('brand', 'b', 'ON', 'u.id = b.user_id_id')
    ->leftJoin('influencer', 'i', 'ON', 'u.id = i.user_id_id');
$query = $qb->getQuery();
return $query->execute();

我得到了这个错误

[语义错误] 第 0 行,第 42 列“brand b ON u.id”附近:错误:类 “品牌”未定义。

有人可以帮忙吗? 非常感谢

【问题讨论】:

  • 普通 SQL 查询是否有效?
  • 是的,普通 SQL 查询正在运行
  • 如果我没看错,你没有从 from 获得 user_account 表。您也不需要brandinfluencer 的来自,但您需要正确加入leftJoin('u', 'brand', 'b', 'u.id = b.user_id')b.user_id_id 有错字吗?
  • 是的,这是一个很好的错字,但它不起作用:/

标签: sql doctrine-orm query-builder


【解决方案1】:

我从未使用过学说查询生成器,但在阅读文档后,我会建议以下解决方案:

$qb = $this->createQueryBuilder()
    ->from('user_account', 'u')
    ->leftJoin('u', 'brand', 'b', 'u.id = b.user_id_id')
    ->leftJoin('u', 'influencer', 'i', 'u.id = i.user_id_id')
$query = $qb->getQuery();
return $query->execute();

注意:我离开了b.user_id_id,就像在你的例子中一样,即使我认为有一个错字。也许这应该意味着b.user_idinfluencer 也一样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-02
    • 2019-09-08
    • 2021-12-17
    • 2011-05-26
    • 1970-01-01
    相关资源
    最近更新 更多