我有两个实体,一个任务和一个用户。如何创建“加入查询”?
我如何使用extbase(TYPO3 6.1)实现此目的。有没有关于示例的好教程?
答案 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();