Extbase" findBy"有多个参数

时间:2016-02-17 16:50:04

标签: typo3 extbase

我有一个扩展,其中我想要包含一些过滤器,我知道我可以使用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对这种搜索查询有什么解决方案?我在文档中找不到任何好的或可理解的东西。

1 个答案:

答案 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/找到关于如何做到这一点的非常全面的解释。不幸的是,它并不完全是最新的,但有关构建查询的部分仍然有效。