【问题标题】:TYPO3 extbase database queryTYPO3 extbase 数据库查询
【发布时间】:2015-05-16 09:21:44
【问题描述】:

我有一个如下所示的 extbase 数据库查询。

$query = $this->createQuery();        
$result = $query->statement("Select * FROM table1 WHERE hidden = 0 AND deleted = 0 AND (".$PublicationYears.") AND logo != '' ORDER BY uid ASC LIMIT 0, ".$iLimit." ")->execute();             
return $result;


$PublicationYears = "ttra = '12' or ttra = '13' or ttra = '14'";

我将这个查询转换如下,

$query = $this->createQuery();

$query->getQuerySettings()->setRespectStoragePage(FALSE);

$query->matching( $query->logicalAnd(
       $query->equals('deleted', 0),
       $query->equals('hidden', 0)
    ));

$query->matching($query->logicalAnd($PublicationYears));

$query->matching($query->logicalNot(
     $query->equals('logo', '')
 ));

$query->setOrderings(array('uid' => Tx_Extbase_Persistence_QueryInterface::ORDER_ASCENDING));

$query->setLimit((integer)$iLimit);
$Result = $query->execute();

return $Result;

但是结果查询不包含相关的查询部分,

$query->matching($query->logicalAnd($PublicationYears));

我认为上述查询中还有其他错误。

请帮助我创建正确的查询。

提前致谢。

【问题讨论】:

    标签: typo3 extbase typo3-6.2.x queryinterface


    【解决方案1】:

    首先你不需要这个

    $query->matching( $query->logicalAnd(
       $query->equals('deleted', 0),
       $query->equals('hidden', 0)
    ));
    

    disable fields 根据 ext_tables.php 中表的设置默认包含在查询中

    多重匹配不起作用 导致你的第三次匹配

    $query->matching($query->logicalNot(
     $query->equals('logo', '')
     ));
    

    正在覆盖之前使用的matching() logicalAnd 在字符串上?也不行

    在您的情况下,您只需将所有内容都放入 logicalAnd 就可以这样做

    $constraints = array();
    $subConstraints = array();
    $subConstraints[] = $query->equals('ttra', 12);
    $subConstraints[] = $query->equals('ttra', 13); 
    $subConstraints[] = $query->equals('ttra', 14);
    $constraints[] = $query->logicalOr($subConstraints);
    $constraints[] = $query->logicalNot(
         $query->equals('logo', '')
     ));
    
    $query->matching($query->logicalAnd($constraints));
    

    【讨论】:

      【解决方案2】:

      对于您的 PublicationYears 值,您必须进行匹配或查询,如下所示: 我认为它可能仅适用于 PublicationYears 变量。

       $query->matching($query->logicalAnd(
                  $query->logicalOr(
                      $query->equals('ttra', 12)           
                  ),
                  $query->logicalOr(
                      $query->equals('ttra', 13)           
                  ),
                  $query->logicalOr(
                      $query->equals('ttra', 14)           
                  ),
              ));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多