如何在TYPO3中使用extbase执行连接语句?

时间:2013-10-10 15:54:06

标签: join typo3 extbase

我有两个实体,一个任务和一个用户。如何创建“加入查询”?

  1. 我需要列出包含User.name的所有任务。
  2. 我还需要一个查询来查找User.name =“Chuck”
  3. 的所有任务

    我如何使用extbase(TYPO3 6.1)实现此目的。有没有关于示例的好教程?

2 个答案:

答案 0 :(得分:2)

在Extbase中,您可以查询/寻址子对象的属性。因此,假设您的任务模型与用户模型有关系,这很容易。

要列出所有任务,包括用户名,只需查询TaskRepository(将其注入Controller中):

$tasks = $this->taskRepository->findAll();
$this->view->assign('tasks', $tasks);

现在,在您的Fluid模板中,您可以迭代任务:

<f:for each="{tasks}" as="task">
  Name of task: {task.name}
  Assigned user: {task.user.name}
</f:for>

您可以使用任务模型的每个属性,包括子对象的属性。

要由分配的用户查找任务,请在taskRepository中添加一个方法,例如:

public function findByTaskAssignedUser($user) {
  $query = $this->createQuery();
  $query->matching($query->equals('user.name', $user));
  return $query->execute();
}

因此,您将获得所分配用户的名称与$ user匹配的所有任务对象。

您也可以使用$ query-&gt;类似于LIKE语句,当然您最好使用用户的uid来执行安全比较。毋庸置疑,如果是用户提供的请求,您需要清理$ user。

最精简的文档来源是Extbase&amp; http://www.typovision.de/fileadmin/slides/ExtbaseFluidCheatSheetTypovision.pdf上的流体备忘单。请查看“自定义存储库查询”。

有一本免费的书籍“TYPO3和Fluid的TYPO3扩展”,请参阅有关各个数据库查询的章节: http://docs.typo3.org/typo3cms/ExtbaseFluidBook/6-Persistence/3-implement-individual-database-queries.html

答案 1 :(得分:2)

1。 您可以阅读所有任务并在TCA和Domainmodel中添加引用。如果你使用Extensionbuilder,这将自动构建。您可以在视图中阅读用户信息,如:

<f:for each="{Tasks}" as="task">
     {task.reference.name}
</f:for>

2。 您应该在Tasks实体中有一个引用。因此,您可以在taskrepository-function

中编写类似'reference.name'的内容
$query = $this->createQuery();
$query->matching(
    $query->equals('reference.name', 'Chuck')
);
$results = $query->execute();