You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Doctrine 2的OR条件andWhere查询代码转换为Doctrine 1.2?

将Doctrine 2代码转换为Doctrine 1.2实现

我帮你把这段Doctrine 2的查询代码转换成Doctrine 1.2的实现啦,逻辑完全和原代码对齐,你可以直接参考:

// 获取Doctrine管理器(如果是Symfony 1.x环境,也可以用$this->getDoctrineManager())
$em = Doctrine_Manager::getInstance();

// Doctrine 1.2中直接用Doctrine_Query构建查询,没有单独的QueryBuilder类
$q = Doctrine_Query::create()
    // 从Message表出发,设置别名m
    ->from('TestBundle:Message m')
    // 关联Product表,对应原代码的join操作,这里用innerJoin保持和原逻辑一致
    ->innerJoin('m.product p')
    // 原代码的第一个条件:m.delDate IS NULL
    ->where('m.delDate IS NULL')
    // 构建OR条件组,对应原代码的orx逻辑
    ->andWhere($q->expr()->orX(
        $q->expr()->eq('p.module', ':module'),
        $q->expr()->isNull('p.module')
    ))
    // 绑定命名参数,和原代码的参数方式保持一致
    ->setParameter('module', $yourModuleValue);

// 执行查询,返回Doctrine_Collection结果集
$results = $q->execute();

几个关键差异说明:

  • Doctrine 1.2没有独立的QueryBuilder类,查询构建直接依托Doctrine_Query对象完成
  • 关联查询的写法更直接,通过innerJoin/leftJoin指定关联属性和别名
  • 参数绑定支持命名参数(:module)和占位符(?)两种方式,这里保留了原代码的命名参数风格
  • 获取管理器的方式改为Doctrine_Manager::getInstance(),Symfony 1.x项目里也可以用框架提供的getDoctrineManager()方法

内容的提问来源于stack exchange,提问作者fatma_wings

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:19:21