2017-10-19 85 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);