如何在 TYPO3 中为 sys_categories 编写查询
How to write a query for sys_categories in TYPO3
我在 extbase/fluid 中编写了一个小扩展,现在我在存储库中遇到了一个小问题。
使用我的扩展,您可以创建使用 system_categories 进行分类的项目(类似于每个新闻扩展)。
我想要做的是在第 X 页上显示所有类别为 x 的项目,并在第 Y 页上显示所有类别为 y 的项目。
我知道我必须在我的 itemRepository.php 中编写查询,但我无法让它工作,所以这是我的存储库代码:
public function findSearchForm($limit)
{
$query = $this->createQuery();
$query->getQuerySettings()->setLanguageUid($GLOBALS["TSFE"]->tmpl->setup['config.']['sys_language_uid']);
$query->matching(
$query->like('title','%'.$search.'%')
);
# $query->setOrderings(array('title' => \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_ASCENDING));
return $query->execute();
}
我试图在 "query->like" 之后扩展查询,即使使用这样的语句
$query->statement("SELECT * FROM sys_category_record_mm WHERE uid_local = '11'")
首先:您是如何对您的记录启用分类的?它在后端是否正常工作?
当您的 TCA 正确配置为类别使用时,您可以使用常见的存储库方法来过滤结果。但是您必须使用 AND.
将条件与您的 "title"-条件结合起来
尝试这样的事情:
public function findSearchForm($limit)
{
$query = $this->createQuery();
$constraints = array();
$yourCategory = 11;
// Your $search-variable seems to be undefined?
//$constraints[] = $query->like('title','%'.$search.'%');
$constraints[] = $query->contains('categories', $yourCategory);
$query->matching(
$query->logicalAnd($constraints)
);
// I think you dont need this...
$query->getQuerySettings()->setLanguageUid($GLOBALS["TSFE"]->tmpl->setup['config.']['sys_language_uid']);
return $query->execute();
}
我在 extbase/fluid 中编写了一个小扩展,现在我在存储库中遇到了一个小问题。
使用我的扩展,您可以创建使用 system_categories 进行分类的项目(类似于每个新闻扩展)。 我想要做的是在第 X 页上显示所有类别为 x 的项目,并在第 Y 页上显示所有类别为 y 的项目。
我知道我必须在我的 itemRepository.php 中编写查询,但我无法让它工作,所以这是我的存储库代码:
public function findSearchForm($limit)
{
$query = $this->createQuery();
$query->getQuerySettings()->setLanguageUid($GLOBALS["TSFE"]->tmpl->setup['config.']['sys_language_uid']);
$query->matching(
$query->like('title','%'.$search.'%')
);
# $query->setOrderings(array('title' => \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_ASCENDING));
return $query->execute();
}
我试图在 "query->like" 之后扩展查询,即使使用这样的语句
$query->statement("SELECT * FROM sys_category_record_mm WHERE uid_local = '11'")
首先:您是如何对您的记录启用分类的?它在后端是否正常工作?
当您的 TCA 正确配置为类别使用时,您可以使用常见的存储库方法来过滤结果。但是您必须使用 AND.
将条件与您的 "title"-条件结合起来尝试这样的事情:
public function findSearchForm($limit)
{
$query = $this->createQuery();
$constraints = array();
$yourCategory = 11;
// Your $search-variable seems to be undefined?
//$constraints[] = $query->like('title','%'.$search.'%');
$constraints[] = $query->contains('categories', $yourCategory);
$query->matching(
$query->logicalAnd($constraints)
);
// I think you dont need this...
$query->getQuerySettings()->setLanguageUid($GLOBALS["TSFE"]->tmpl->setup['config.']['sys_language_uid']);
return $query->execute();
}