2017-10-19 83 views
1

我目前遇到一個問題,這是我認爲連接到數據庫基數和Typo3不能識別它的問題。Typo3 8.7.3 ExtBase - 存儲庫中的單個MySQL查詢

我有一個項目模型有不同的預評估,評估和導師與1:n的關係。所以我想在這些模型中的任何一個模型中獲得用戶連接到的所有項目。不同型號的用戶可以不同或相同,但我只想返回一次該項目。因爲我讀了typo3 extbase的文檔,當我使用單獨的數據庫查詢時,typo3隱式地發現了基數。

在自定義列聲明中,TCA中的類型爲「inline」中設置了評估,預先評估和指導。

我想使用的功能是一個在這裏:

public function findOwnedProjects($filters,$aSorting = NULL, $aSearch = NULL) 
{ 
    $user = $GLOBALS['TSFE']->fe_user->user; 
    $userId = $user['uid']; 

    $query = $this->createQuery(); 

    $orCondition[] = $query->equals('preEvaluations.frontendUser', $userId); 
    $orCondition[] = $query->equals('evaluations.frontendUser', $userId); 
    $orCondition[] = $query->equals('mentorings.frontendUser', $userId); 
    $orCondition[] = $query->equals('projectlead', $userId); 

    $condition[] = $query->logicalOr($orCondition); 

    $condition[] = $query->equals("type", 'project', false); 

    $query->matching($query->logicalAnd($condition)); 

    if (!empty($aSorting)) { 
     $sSorting = $aSorting['order'] == 'asc' ? \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_ASCENDING : \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_DESCENDING; 
     $sSortBy = strip_tags(trim($aSorting['sortBy'])); 
     $query->setOrderings(array($sSortBy => $sSorting)); 
    } 

    return $query->execute(); 
} 

但這返回重複的項目時,有不止一個preevaluation左右連接到該項目。我試着var_dumping生成的SQL語句,可以看到沒有使用DISTINCT。這是我認爲的全部問題,迄今爲止我還沒有看到解決方案。

我不是typo3專家,只是試圖找出問題所在。如果你知道我可能錯過了什麼,請回答這個問題。

謝謝!

回答

0

我會嘗試用$query->contains方式類似:

$orCondition[] = $query->contains('preEvaluations.frontendUser', $userId); 
$orCondition[] = $query->contains('evaluations.frontendUser', $userId); 
$orCondition[] = $query->contains('mentorings.frontendUser', $userId); 
$orCondition[] = $query->contains('projectlead', $userId);