我当前遇到的问题是我认为与数据库基数有关的问题,而Typo3无法识别它。

我有一个项目模型,该模型具有与1:n关系相关的不同的预评估,评估和指导。所以我想在这些模型之一中获得用户连接到的所有项目。不同模型的用户可以不同也可以相同,但是我只想回来一次。由于我阅读了typo3 extbase文档,因此当我使用单独的数据库查询时,typo3隐式地找到基数。

评估,预评估和指导在TCA中用自定义列声明中的“内联”类型设置。

我尝试使用的功能是这里的一个:

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


但是,如果一个或多个预评估与该项目相关联,这将返回重复的项目。我尝试了var_dumping生成的SQL语句,可能会发现没有DISTINCT在使用中。我认为这就是整个问题,到目前为止我还没有找到解决方案。

我不是typo3专家,只是想找出问题所在。如果您知道我可能错过了什么,请回答此问题。

谢谢!

最佳答案

我会尝试使用$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);

08-04 13:46