带有Symfony的ZF2学说<或null查询

罗恩·皮格特

我该如何以与Doctrine兼容的方式编写“ WHERE”条件?

( ( `translations_es_google`.`translation_date` < `translations_masters`.`translation_date` ) OR ( `translations_es_google`.`translation_date` is null ) )

我尝试过(失败)的是:

$query1
    ->andWhere('((t.translationDate < m.translationDate) OR (t.translationDate is NULL))');

$query1
    ->andWhere('(t.translationDate < m.translationDate) OR (t.translationDate is NULL)');

教义查询的表别名是

  • t代表表格translations_es_google
  • m代表表格translations_masters

当我删除此“ andWhere”条件时,其余的QueryBuilder查询将按预期执行。

我正在尝试执行的查询是

SELECT 
    `translations_masters`.`translation_key` , `translations_masters`.`text_domain` , `translations_masters`.`translation_date` 
FROM 
    `translations_masters` 
LEFT JOIN 
    `translations_es_google` ON ( ( `translations_masters`.`text_domain` = `translations_es_google`.`text_domain` ) AND ( `translations_masters`.`translation_key` =`translations_es_google`.`translation_key` ) ) 
WHERE 
    `translations_masters`.`language_iso` NOT LIKE 'es-Google' AND ( ( `translations_es_google`.`translation_date` < `translations_masters`.`translation_date` ) OR ( `translations_es_google`.`translation_date` is null ) ) 
GROUP BY 
    `translations_masters`.`translation_key` , `translations_masters`.`text_domain` 
ORDER BY 
    `translations_masters`.`translation_date` ASC 

根据要求,此查询的QueryBuilder版本为:

$query1 = $this->entityManager
    ->createQueryBuilder()
    ->select('m.textDomain , m.translationKey , m.translationDate , m.translationDate AS translationMasterDate , t.translationDate')
    ->from(
        'AMDatabase\Entity\TheVerse\Translations' . $explode1 . $explode2,
        't'
    )
    ->leftJoin(
        'AMDatabase\Entity\TheVerse\TranslationsMasters',
        'm',
        Join::WITH,
        '(m.textDomain = t.textDomain) AND (m.translationKey = t.translationKey)'
    )
    ->groupBy('m.textDomain , m.translationKey')
    ->orderBy(
        'm.translationDate',
        'ASC'
    )
    ->setMaxResults('1');

$query1
    ->andWhere(
        $query1->expr()
               ->notLike(
                   'm.languageIso',
                   ':languageIso'
               )
    )
    ->setParameter(
        'languageIso',
        $value
    );

$query1->andWhere(
    $query1->expr()->orX(
        't.translationDate < m.translationDate',
        't.translationDate IS NULL'
    )
);

$result1 = $query1->getQuery()
                ->getArrayResult();

输出$ query1-> getQuery() - > getSQL()

SELECT 
    t0_.text_domain AS text_domain_0, t0_.translation_key AS translation_key_1, t0_.translation_date AS translation_date_2, t0_.translation_date AS translation_date_3, t1_.translation_date AS translation_date_4
FROM 
    thev1010_theverseoftheday.translations_es_google t1_ 
LEFT JOIN 
    thev1010_theverseoftheday.translations_masters t0_ ON ((t0_.text_domain = t1_.text_domain) AND (t0_.translation_key = t1_.translation_key)) 
WHERE 
    t0_.language_iso NOT LIKE ? AND (t1_.translation_date < t0_.translation_date OR t1_.translation_date IS NULL) 
GROUP BY 
    t0_.text_domain, t0_.translation_key 
ORDER BY 
    t0_.translation_date ASC 
LIMIT 1
  • 值是“ es-Google”

$ query1-> getQuery()-> getDQL();的输出

SELECT 
    m.textDomain , m.translationKey , m.translationDate , m.translationDate AS translationMasterDate , t.translationDate 
FROM 
    AMDatabase\Entity\TheVerse\TranslationsEsGoogle t 
LEFT JOIN 
    AMDatabase\Entity\TheVerse\TranslationsMasters m WITH (m.textDomain = t.textDomain) AND (m.translationKey = t.translationKey) 
WHERE 
    m.languageIso NOT LIKE :languageIso AND (t.translationDate < m.translationDate OR t.translationDate IS NULL) 
GROUP BY 
    m.textDomain , m.translationKey 
ORDER BY 
    m.translationDate ASC
  • 值是“ es-Google”
阿尔达米尔

orX表情如何

您可以这样尝试:

$query1->andWhere(
    $query1->expr()->orxX(
         't.translationDate < m.translationDate',
         't.translationDate IS NULL'
    )
);

orX使您能够添加多个条件,并以逗号分隔。您还可以将orX条件分离到其自己的变量,并将添加到andWhere条件中的所有内容传递给条件。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

symfony2:带有学说的本机查询

来自分类Dev

带有时间的symfony2学说缓存查询

来自分类Dev

带有父实体的 symfony 学说搜索查询

来自分类Dev

ZF2学说-使用查询生成器如何指向存储库中的自定义方法

来自分类Dev

带有ZF2注释的学说:如何清除多选字段?

来自分类Dev

使用REGEXP的ZF2查询

来自分类Dev

ZF2 mysql查询(带间隔)

来自分类Dev

访问查询参数onBootstrap ZF2

来自分类Dev

PHP zf2邮件返回null

来自分类Dev

Symfony2学说创建查询

来自分类Dev

带有selectionArgs的SQLite查询null

来自分类Dev

SQL 查询学说 symfony

来自分类Dev

查询构建学说 Symfony

来自分类Dev

ZF2学说:何时刷新ObjectManager

来自分类Dev

ZF2学说-字段集绑定

来自分类Dev

ZF2学说:何时刷新ObjectManager

来自分类Dev

如何使用ZF2 Firebird_PDO执行查询

来自分类Dev

计算查询ZF2中的百分比

来自分类Dev

带有LIMIT的学说查询语言(DQL)createquery

来自分类Dev

ZF2 将空的发布字段转换为 Null

来自分类Dev

从原始查询(带有子查询)到学说查询构建器

来自分类Dev

mongoDB查询返回null,但带有.toArray返回数据

来自分类Dev

在 SQL 查询输出中包含带有 0 或 NULL 的行

来自分类Dev

ZF2学说中的货币格式输入值

来自分类Dev

ZF2学说与objectSelect获得许多联系

来自分类Dev

Symfony2 /主义:findBy多个查询可以为NULL

来自分类Dev

2个查询的sql加法返回NULL

来自分类Dev

如何使用Doctrine 2查询NOT NULL?

来自分类Dev

ZF2如何避免SQL查询限制在子查询中添加引号