Extbase fe_user findByUsergroup

时间:2018-02-13 13:09:38

标签: typo3 extbase

我想列出属于指定用户组的所有fe_users。如果用户只分配了一个用户组,则以下工作正常

$users = $this->userRepository->findByUsergroup($this->settings['fachgruppe']);
$this->view->assign('users', $users);

但是会有超过1组分配的用户,结果将为空。用户组不是m:n关系,而只是逗号分隔的字符串,因为它似乎:11,12,28但这就是如何构建它并且我无法控制它。

(如何)是否可以让所有用户与多个用户组关联?

3 个答案:

答案 0 :(得分:1)

对于多个查询值和单个值属性,您通常使用QueryInterface::in(),对于单个查询值和您使用QueryInterface::contains()的多值属性。

但是这里有多个查询值和一个具有多个值的属性。因此,您需要一个这样的自定义存储库方法:

public function findByUserGroups(array $userGroups): QueryResultInterface
{
    $query = $this->createQuery();
    $constraints = [];

    foreach ($userGroups as $userGroup) {
        $constraints[] = $query->contains('userGroup', $userGroup);
    }

    // Use logicalAnd() instead if all groups must match
    return $query->matching($query->logicalOr($constraints))->execute();
}

答案 1 :(得分:1)

由于这是TYPO3存储集的旧方式,您可以使用旧方法来查找关系:通过这样的纯SQL查询来执行:

 SELECT * 
     FROM fe_users 
     WHERE concat(",", usergroups, ",") LIKE "%,3,%"

连接是必要的,以便有一个正确的字符串来比较和正确识别组(没有误报,找到组3存储与组13的关系)。

答案 2 :(得分:0)

尝试使用下面的extbase查询。

$users = $this->userRepository->findByUserGroups($this->settings['fachgruppe']);

public function findByUserGroups($userGroups)
{
  $userGroup = explode(',', $userGroups);
  $query = $this->createQuery();
  $query->matching(
      $query->in('usergroup', $userGroup)
  );
  return $query->execute();
}