以下功能有效。但我想一起使用“声明”和“喜欢”。如果我用constraint1注释掉这一行并尝试使用:
$constraint1 = $query->statement("SELECT * FROM pages WHERE title LIKE '" . $text . "%'");
...查询不起作用。
我收到了一个错误:
1:PHP Catchable Fatal Error:参数1传递给TYPO3 \ CMS \ Extbase \ Persistence \ Generic \ Qom \ QueryObjectModelFactory :: _或()必须实现接口TYPO3 \ CMS \ Extbase \ Persistence \ Generic \ Qom \ ConstraintInterface,instance给出了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)
);
...查询为空。
答案 0 :(得分:2)
我没有看到你的问题。您希望返回标题字段中包含术语$ text或标题字段中包含“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输入,请不要忘记清理输入。