2013-10-10 50 views
1

我有兩個實體一個任務和一個用戶。我怎樣才能創建一個「加入查詢」?如何在TYPO3中使用extbase執行連接語句?

  1. 我需要列出包括User.name在內的所有任務。
  2. 我還需要一個查詢尋找到User.name =「查克」

我怎樣才能實現這一目標與extbase(TYPO3 6.1)的所有任務。有什麼地方有一個很好的教程和例子嗎?

回答

2

在Extbase中,您可以查詢/尋址子對象的屬性。所以假設你的任務模型與用戶模型有關係,這很容易。

要列出所有任務,包括他們的用戶名,只需查詢TaskRepository(在你的控制器注入的話):

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

現在,在你的液體模板,你可以遍歷任務:

<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(); 
} 

因此,您將獲得在指定的用戶名$用戶匹配所有的任務對象。

你也可以使用$ query-> like作爲LIKE語句,當然你最好使用用戶的uid來執行安全的比較。不用說,如果是用戶提供的請求,您需要清理$ user。

最簡明的文檔來源是http://www.typovision.de/fileadmin/slides/ExtbaseFluidCheatSheetTypovision.pdf上的Extbase & Fluid Cheat Sheet。請查看「定製存儲庫查詢」。

有一個免費的書「TYPO3擴展與TYPO3和流體」,看到單獨的數據庫查詢章: http://docs.typo3.org/typo3cms/ExtbaseFluidBook/6-Persistence/3-implement-individual-database-queries.html

+0

它有效。我在哪裏可以在文檔中找到它? – koalabruder

+1

請參閱我的關於文檔的編輯。 – lorenz

2

1. 可以讀取所有任務,並在您的TCA和你的DomainModel添加引用。如果您使用Extensionbuilder,則會自動生成。比你可以在樣的觀點看userinformation:

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

2. 你應該在任務實體的引用。所以你可以在你的taskrepository中寫上'reference.name'這樣的函數

$query = $this->createQuery(); 
$query->matching(
    $query->equals('reference.name', 'Chuck') 
); 
$results = $query->execute();