首页 文章

在TYPO3 Extbase Repository中使用声明和喜欢一起使用

提问于
浏览
0

以下功能有效 . 但我想一起使用“声明”和“喜欢” . 如果我使用constraint1注释掉该行并尝试使用:

$constraint1 = $query->statement("SELECT * FROM pages WHERE title LIKE '" . $text . "%'");

...查询不起作用 .

我收到一个错误:

1:PHP Catchable致命错误:参数1传递给TYPO3 \ CMS \ Extbase \ Persistence \ Generic \ Qom \ QueryObjectModelFactory :: _或()必须实现接口TYPO3 \ CMS \ Extbase \ Persistence \ Generic \ Qom \ ConstraintInterface,TYPO3的实例给定的CMS \ Extbase \ Persistence \ Generic \ Query,在第439行[...]中调用,并在[...] \ typo3 \ sysext \ extbase \ Classes \ Persistence \ Generic \ Qom \ QueryObjectModelFactory.php第122行中定义

功能:

/**
    * Test
    *
    * @param string $text
    * @return Objects
    */
    public function findWordsByText($text) {

        $query = $this->createQuery();
        $query->getQuerySettings()->setRespectStoragePage(FALSE);

        $query->getQuerySettings()->setReturnRawQueryResult(TRUE);

        $constraint1 = $query->like('title', $text . '%');
        // $constraint1 = $query->statement("SELECT * FROM pages WHERE title LIKE '" . $text . "%'");

        $constraint2 = $query->like('title', 'new');

        $constraint = array($constraint1, $constraint2);

        $query->matching(
            $query->logicalOr($constraint)
        );

        $records = $query->execute();

        return $records;
    }

如果我更改了以下行:

$query->matching(
        $query->logicalOr($constraint)
    );

To - logicalAnd:

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

...查询为空 .

1 回答

  • 2

    我没有看到你的问题 . 您希望返回 Headers 字段中包含术语$ text或 Headers 字段中包含“new”的所有记录 . 所以只需使用一个简单的logicalOr查询:

    /**
    * Test
    *
    * @param string $text
    * @return Objects
    */
    public function findWordsByText($text) {
    
        $query = $this->createQuery();
        $query->getQuerySettings()->setRespectStoragePage(FALSE);
        $query->getQuerySettings()->setReturnRawQueryResult(TRUE);
    
        $query->matching(
            $query->logicalOr(
               $query->like('title', '%' . $text . '%'),
               $query->like('title', 'new')
            )
        );
    
        return $query->execute();
    }
    

    $ query-> statement()用于原始SQL查询,不能与createQuery结合使用 .

    顺便说一句,如果$ text来自POST或GET输入,请不要忘记清理输入 .

相关问题