如何将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
相关产品推荐
相关产品推荐

