原则查询生成器长度



如何在查询生成器中重现此内容

AND     LENGTH( CONCAT_WS('', lsc.door_code, lsc.alarm_code, lsc.service_code, lsc.master_log) ) > 0"

我这样尝试

            $orX = $qb->expr()->orX();
        $orX
            ->add($qb->expr()->length('lsc.doorCode > 0'))
            ->add($qb->expr()->length('lsc.alarmCode > 0'))
            ->add($qb->expr()->length('lsc.serviceCode > 0'))
            ->add($qb->expr()->length('lsc.masterLog > 0'));
        $qb->andWhere($orX);

有错误:

[Syntax Error] line 0, col 549: Error: Expected DoctrineORMQueryLexer::T_CLOSE_PARENTHESIS, got '>'

和我的查询

SELECT 
            CONCAT(
            IFNULL(location.name, ''),' (',IFNULL(location.streetAddress, ''),' ',IFNULL(location.staircase, ''),' ',IFNULL(location.flatNumber, ''),' ',IFNULL(location.postal, ''),' ',IFNULL(location.postOffice, ''),')') as address,            
            lsc.doorCode,
            lsc.serviceCode,
            lsc.alarmCode,
            lsc.masterLog
         FROM AppBundle:LocationServiceCompany lsc INNER JOIN lsc.location location WHERE lsc.serviceCompany = :sc AND (LENGTH(lsc.doorCode > 0) OR LENGTH(lsc.alarmCode > 0) OR LENGTH(lsc.serviceCode > 0) OR LENGTH(lsc.masterLog > 0))

如何使用长度?

我来这里是因为我在查询生成器中使用长度时遇到了类似的问题。我尝试了($qb->expr((->length('lsc.doorCode> 0'(,但它不起作用。它的SQL输出是"LENGTH(lsc.doorCode> 0(",它抛出了一个错误。

我对这个问题的解决方案是:

$qb->expr()->gt($qb->expr()->length('lsc.doorCode'), 0)

生成正确的SQL语法"LENGTH(lsc.doorCode(>0"。

你这里有一个错字:

$orX = $qb->expr()->orX();
    $orX
        ->add($qb->expr()->length('lsc.doorCode > 0')); <--
        ->add($qb->expr()->length('lsc.alarmCode > 0'))
        ->add($qb->expr()->length('lsc.serviceCode > 0'))
        ->add($qb->expr()->length('lsc.masterLog > 0'));
    $qb->andWhere($orX);

删除;并消除语法错误。

对于连接长度,您可以尝试如下操作:

$query->andWhere("LENGTH( CONCAT_WS('', lsc.door_code, lsc.alarm_code, lsc.service_code, lsc.master_log) ) > 0")

更新后您可以使用 Doctrine 运行本机 SQL 查询,如下所示:

http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/native-sql.html#the-nativequery-class

供参考:

<?php
use DoctrineORMQueryResultSetMapping;
$rsm = new ResultSetMapping();
// build rsm here
$query = $entityManager->createNativeQuery('SELECT id, name, discr FROM users WHERE name = ?', $rsm);
$query->setParameter(1, 'romanb');
$users = $query->getResult();

如果更新的查询有效,这将是使其正常工作的一种方法。

相关内容

  • 没有找到相关文章

最新更新