查询生成器/DQL 不适用于 INNER JOIN - 语法问题

2023-12-25

我知道我这里有语法问题,但我无法弄清楚。我正在尝试对 5 个表进行 SELECT 和 INNER JOIN,但 Symfony 抱怨 JOIN 中的实体在定义之前就被使用了。

实际错误如下:[Semantical Error] line 0, col 121 near 'I ON C.id = ': Error: Identification Variable MySiteBundle:Items used in join path expression but was not defined before.

这是 PHP 代码。

Note:我已将此查询缩短为两列、两个表和一个联接,以保持问题简单并表明我的观点。实际的查询要长得多并且会产生相同的错误。

$em = $this->getDoctrine()->getEntityManager();
$query = $em->createQuery(
    'select C.name as CName, I.id as IId
    FROM MySiteBundle:Categories C
    INNER JOIN MySiteBundle:Items I ON C.id = I.category_id');
$result = $query->getResult();

Update

正如建议的那样,我已经放弃了 DQL 代码并使用查询生成器代码。我收到一个非常相似的错误,其中写着'Categories c': Error: Class 'Categories' is not defined。我的 QB 代码如下。

$em = $this->getDoctrine()->getEntityManager();
$qb = $em->createQueryBuilder()
        ->select('c.name, i.id, i.image, i.name, i.description, m.id, m.quantity, m.value, m.qty_received, m.custom_image, m.custom_name, m.custom_description, u.user1fname, u.user1lname, u.user2fname, u.user2lname')
        ->from('Categories', 'c')
        ->innerJoin('Items', 'i', 'ON', 'c.id = i.category_id')
        ->innerJoin('MemberItems', 'm', 'ON', 'i.id = m.item_id')
        ->innerJoin('User', 'u', 'ON', 'm.memberinfo_id = u.id')
        ->where('u.id = ?', $slug)
        ->orderBy('c.id', 'ASC')
        ->getQuery();

$memberItems = $qb->getResult();

有什么建议么?


路易斯在我打字的时候发了帖子。那好吧。

DQL 会根据您的关联为您处理加入详细信息。一般来说,你只需要拼出FROM类名即可。就像是:

'select C.name as CName, I.id as IId
FROM MySiteBundle:Categories C
INNER JOIN C.items');

并最终使用查询生成器。

=================================================== ===========================

这是在 Symfony 2 中使用查询构建器的示例。

public function getAccounts($params = array())
{
    // Build query
    $em = $this->getEntityManager();
    $qb = $em->createQueryBuilder();

    $qb->addSelect('account');
    $qb->addSelect('accountPerson');
    $qb->addSelect('person');
    $qb->addSelect('registeredPerson');
    $qb->addSelect('projectPerson');

    $qb->from('ZaysoCoreBundle:Account','account');

    $qb->leftJoin('account.accountPersons',  'accountPerson');
    $qb->leftJoin('accountPerson.person',    'person');
    $qb->leftJoin('person.registeredPersons','registeredPerson');
    $qb->leftJoin('person.projects',         'projectPerson');
    $qb->leftJoin('projectPerson.project',   'project');

    if (isset($params['accountId']))
    {
        $qb->andWhere($qb->expr()->in('account.id',$params['accountId']));
    }
    if (isset($params['projectId']))
    {
        $qb->andWhere($qb->expr()->in('project.id',$params['projectId']));
    }
    if (isset($params['aysoid']))
    {
        $qb->andWhere($qb->expr()->eq('registeredPerson.regKey',$qb->expr()->literal($params['aysoid'])));
    }
    $query = $qb->getQuery();

  //die('DQL ' . $query->getSQL());
    return $query->getResult();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

查询生成器/DQL 不适用于 INNER JOIN - 语法问题 的相关文章

随机推荐

  • 如果 Hive 失败则停止 Bash 脚本

    我有一个 bash 脚本 它循环遍历文件夹并处理所有 hql 文件 有时 某个配置单元脚本会失败 语法 资源限制等 而不是失败的脚本将继续执行下一个 hql 文件 无论如何 我可以阻止 bash 处理剩余的内容吗 下面是我的示例 bash
  • 如何在 Node.js 中等待所有异步任务完成?

    我的程序需要运行许多异步任务 当所有异步任务完成时 必须运行一项任务 如何使该函数等待所有异步函数 let urls for var i 0 i
  • 使用 Python 3 从位于 Jupyter Notebook 中相对导入的另一个目录中的模块导入本地函数

    这个问题在这里已经有答案了 我有一个类似于以下的目录结构 meta project project1 init py lib module py init py notebook folder notebook jpynb 工作时在note
  • 附加与十六进制相反的 DWORD 十进制值

    我需要向注册表写入一个新值 我陷入了以下代码 因为我可以添加的是标准密钥 并且我需要将新的十进制值放置到 DWORD 键 相对于十六进制值 暗淡的wsh wsh CreateObject WScript shell wsh regwrite
  • 选择分隔字符串作为 Oracle sql 中的表

    我有一个像这样的字符串 宽度 10 7 20 45 高度 25 5 6 45 长度 35 6 3 4 我正在寻找编写一个选择查询来选择它作为一个表 例如 Width Height Length 10 25 35 7 5 6 20 6 3 4
  • GROUP BY 忽略属性

    例如我有这张表 itemgroup description price A a 10 A b 12 A c 14 B g 11 B h 16 我想选择一组中价格最高的行 如下所示 A c 14 B h 16 让我接近这个的 SQL 查询 功
  • 在 3D 地形上,给定 3D 线,找到线与地形之间的交点

    我有一个 3D 地形网格 其中每个坐标 x y z 每个网格的值都是已知的 现在 我有一条单调增加 减少的线 它的起点也是已知的 我想找到地形和线的交汇点 做到这一点的算法是什么 我能想到的是将 3D 地形的坐标存储在nxn矩阵 然后我会根
  • 如何在枚举中调用附加方法?

    enum Enum1 BIG 8 HUGE 10 public String getName return Huge public String getContry return India additional Method OVERWH
  • Azure Active Directory 登录应用程序始终创建企业应用程序,无法设置replyUrls

    过去 有单独的网站和 Azure 经典门户用于管理登录应用程序 在经典门户中 您可以编辑 ReplyUrls 在新门户中 无论您如何创建应用程序 企业或应用程序注册 您都无法从 UI 编辑您的 ReplyUrls 使用应用程序 您可以第一次
  • 如何找出哪个 Rust 依赖项添加了动态链接库

    我有一个相当大的项目 有很多依赖项 我希望生成的二进制文件使用尽可能少的动态链接库 我刚刚检查了生成的二进制文件并看到 ldd target debug foo libssl so 1 1 gt lib x86 64 linux gnu l
  • 使用python解析JSON以根据条件获取值

    我是 python 新手 尝试解析 json 文件并根据条件获取所需字段 例如 如果 status true 则 打印姓名 json文件 id 12345 name London active true status true versio
  • 检查蓝牙状态 - Swift 4

    我在 Xcode 中遇到蓝牙问题 我找不到关于如何检查蓝牙是否打开的好解决方案 我想要的就是这个 我在网上搜索了一些解决方案 但没有任何对我有用 关于如何检查蓝牙有什么想法吗 我导入了 CoreBluetooth 类并编写了这行代码 if
  • 如何从 Swift 中的字符串中删除引号?

    我正在尝试删除 Swift 中的引号String就像是 Hello 这样斯威夫特String只是 Hello 你可以简单地使用 Swift 1 var str String Hello print str Hello print str s
  • 角度4-在一个打开的选项卡中注销时在所有选项卡中自动注销

    我想在一个打开的选项卡中注销时自动从所有打开的选项卡中注销 我在登录时将 jwt 令牌设置为 localStorage 并在注销时删除该令牌 如何使用存储事件从所有打开的选项卡中注销 您可以在存储上添加事件侦听器 如下所示 window a
  • 如何在java中生成XML(以字符串表示形式)

    我定义了一个java类 但只需要将该类的一些字段输出到XML中 返回的类型必须是 String 我首先选择了使用 StringBuffer 的最简单方法 但是 当我尝试处理输出字符串表示时 它失败了 我认为这很可能是因为输入中有些字符没有以
  • 在C中循环中重新声明数组

    当循环重复时 在循环中声明的数组不会设置为零吗 我有一个数组并以这种方式使用它 while i
  • C++0x 草案中的一点:n3290

    N3290 ISO 标准草案 3 4 1 12 中的一点 在查找中使用的名称期间常量表达式 of an 枚举数定义 之前声明的枚举器枚举的可见 并隐藏在包含该枚举的块 类或命名空间范围中声明的实体的名称枚举说明符 这是添加的新点 任何人都可
  • HTML5 视频:检测时间线的拖动

    我想知道是否有一种完全可靠的方法可以知道用户何时拖动 HTML5 视频的时间线 到目前为止 我一直绑定到 timeUpdate 但尚不清楚 currentTime 是否由于拖动而增加 或者只是由于视频播放而增加 谢谢 我知道MediaEle
  • H2数据库从1.4.200升级到2.0.204后集成测试出现问题

    最近我升级了H2数据库在我们的SpringBoot 2 5 8来自版本的项目1 4 200 to 2 0 204 它仅用于测试目的 对于生产 我们使用PostgreSQL 12 9 好像升级后有些词变成了关键词H2数据库例如 day val
  • 查询生成器/DQL 不适用于 INNER JOIN - 语法问题

    我知道我这里有语法问题 但我无法弄清楚 我正在尝试对 5 个表进行 SELECT 和 INNER JOIN 但 Symfony 抱怨 JOIN 中的实体在定义之前就被使用了 实际错误如下 Semantical Error line 0 co