我有一个扩展,其中我想要包含一些过滤器,我知道我可以使用foreach $file (@file_names)
{
open(my $fh, '<:encoding(UTF-8)', $file)
or die "Could not open file '$file' $!";
while (my $row = <$fh>)
{
if($row =~ "uname")
{
#here I want to extract only the immediate word after "uname", which is "whirlcano" in the above example.
}
}
}
过滤我listAction()
显示的结果。
我对它进行了测试,结果如下:
findBy
我现在的问题是我需要使用多个参数过滤结果,如果我想添加$cars = $this->carRepository->findByCarid("1");
$this->view->assign('cars', $cars);
,那么它会让我所有的汽车都隐藏1并且颜色为蓝色? extbase对这种搜索查询有什么解决方案?我在文档中找不到任何好的或可理解的东西。
答案 0 :(得分:4)
您必须自己扩展存储库并对此功能进行编码。 Extbase为您提供了一个简单但功能强大的API。
class whatEverYourRepositoryIsCalled extends \TYPO3\CMS\Extbase\Persistence\Repository {
public function findByFilter($carId, $color) {
// Create empty query = select * from table
$query = $this->createQuery();
// Add query options
return $query->matching(
// ALL conditions have to be met (AND)
$query->logicalAnd(
// table column carId must be euqal to $carId
$query->equals('carId', $carId),
// table column color must be euqal to $color
$query->equals('color', $color)
)
);
}
}
这是解决问题的一种非常简单的方法。在现实世界中,我可能会使用一系列过滤条件来执行过滤,例如array('carId' => 1, 'color' => 'blue')
。在findByFilter()
内,将提取这些值并将其添加到查询中。
关键是构建所需的查询。可以在http://blog.typoplanet.de/2010/01/27/the-repository-and-query-object-of-extbase/找到关于如何做到这一点的非常全面的解释。不幸的是,它并不完全是最新的,但有关构建查询的部分仍然有效。