2017-10-19 6 views
1

Je suis actuellement confronté à un problème qui est ce que je pense connecté à la cardinalité de base de données et Typo3 ne pas le reconnaître.Typo3 8.7.3 ExtBase - Requête MySQL individuelle dans le référentiel

J'ai un modèle de projet qui comporte différentes évaluations préalables, évaluations et tutorats liés à la relation 1: n. Donc, je veux obtenir tous les projets où un utilisateur est connecté dans l'un de ces modèles. L'utilisateur pour les différents modèles peut être différent ou identique, mais je veux récupérer le projet une seule fois. Depuis que j'ai lu dans la documentation de la base externe typo3, la cardinalité est implicitement trouvée par typo3 lorsque j'utilise des requêtes db individuelles.

Les évaluations, preevaluations et mentorings sont définies dans le TCA avec le type "inline" dans une déclaration de colonne personnalisée.

La fonction que je suis en train d'utiliser est celui-là ici:

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

Mais revient des projets en double quand il y a plus d'un preevaluation ou si relié au projet. J'ai essayé var_dumping l'instruction SQL qui est générée et pourrait voir qu'il n'y a pas DISTINCT en cours d'utilisation. C'est tout le problème que je pense et je ne vois pas de solution jusqu'à présent. Je ne suis pas une experte typo3 et j'essaie juste de comprendre quel est le problème. Si vous avez une idée de ce que j'ai pu manquer, veuillez répondre à cette question.

Merci!

Répondre

0

Je voudrais essayer la méthode $query->contains comme ça:

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