如何在doctrine2 queryBuilder中实现ON(... OR ...)mysql查询

Zalex

我在MYSQL中有一个SQL查询:例如

SELECT s.* FROM vplanning.cities as c1
INNER JOIN vplanning.cities as c2
ON (c1.id = c2.area_id)
INNER JOIN vplanning.storages as s
ON (s.city_id = c2.id OR s.city_id = c1.id)
WHERE c1.id = 109;

在原则上,我可以这样写(从我的工作代码中):

$query = $em->getRepository('VplanningPageBundle:Storage')
            ->createQueryBuilder('s')
            ->innerJoin('s.city', 'c1')
            ->innerJoin('c1.area', 'c2')
            ->innerJoin('s.storagestype', 'st')
            ->where('c2.id = :cityID')
            ->andWhere('st.typename = :storagesTypeName')
            ->andWhere('s.active = :active')
            ->setParameters(array(
                'cityID' => $cityID,
                'storagesTypeName' => $storagesTypeName,
                'active' => 1
            ))
            ->orderBy('s.adress')
            ->getQuery();

如您所见,我在

->innerJoin('s.city', 'c1')

但我也需要像

->innerJoin('s.city', 'c2')

在这种情况下:

ON (s.city_id = c2.id OR s.city_id = c1.id)

但这会引发此错误:

错误:“ c2”已定义

c1并且c2是同一实体并具有内部关系。

Zalex

这个问题的解决对我来说非常困难,我必须研究它:)

这是我在一些论坛上提出的问题的答案:

$qb = $em->getRepository('VplanningPageBundle:Storage')->createQueryBuilder('storage');
            $query = $qb->join('storage.city', 'city1', Join::WITH)
                ->leftJoin('city1.area', 'area', Join::WITH, $qb->expr()->eq('area.id', ':cityID'))
                ->leftJoin('storage.city', 'city2', Join::WITH, $qb->expr()->eq('city2.id', ':cityID'))
                ->join('storage.storagestype', 'type', Join::WITH, $qb->expr()->eq('type.typename', ':storagesTypeName'))
                ->where('storage.active = :active')
                ->andWhere($qb->expr()->orX($qb->expr()->isNotNull('city2'), $qb->expr()->isNotNull('area')))
                ->setParameters(array(
                'cityID' => $cityID,
                'storagesTypeName' => $storagesTypeName,
                'active' => 1
            ))
                ->orderBy('storage.adress')
            ->getQuery();

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Doctrine2 SELECT查询中处理DateTime类型的默认值?

如何在Doctrine2中查询WHERE ='来自相关实体的值'

Symfony3 / Doctrine2:使用QueryBuilder与InnerJoin进行子查询

Doctrine2 + Symfony2:如何在Symfony2中使用命名空间的Doctrine实体?

如何在Doctrine2中的联接表中添加其他列?

如何在Doctrine2中没有@Column注释的实体的属性中搜索?

如何在Laravel QueryBuilder / MySQL Spatial软件包中按距离对查询结果进行排序?

如何在Doctrine2中使用SQL的YEAR(),MONTH()和DAY()?

如何在doctrine2中创建数据库(独立)

WHERE ...在Doctrine queryBuilder或同等查询中的带子查询的IN查询

如何在mysql中查询

完全不匹配的Doctrine2 QueryBuilder

doctrine2 querybuilder不之间

与多义关系中的Doctrine QueryBuilder不在查询中

在Doctrine2中的本机查询中获取未映射的字段

如何在字符串最大长度的doctrine2实体中禁用隐式字符串修整?

制定复杂的Doctrine2 DQL查询

如何在mysql中的2个日期之间进行查询?

如何在并排表中显示 2 个 mysql 查询

如何在Yii2中通过queryBuilder构建此sql查询?

如何在MySQL中查询此输出?

如何在mysql中查询多个表

MYSQL 引擎如何在查询中工作

如何在mysql中查询不同的记录

如何在MySQL查询中包含用户?

如何在MySQL查询中替换“空集”?

如何在MySQL中查询BINARY字段?

如何在mysql中记录错误查询?

如何在MySQL中过滤查询