我想列出属于指定用户组的所有fe_users。如果用户只分配了一个用户组,则以下工作正常 :
$users = $this->userRepository->findByUsergroup($this->settings['fachgruppe']);
$this->view->assign('users', $users);
但是会有超过1组分配的用户,结果将为空。用户组不是m:n关系,而只是逗号分隔的字符串,因为它似乎:11,12,28
但这就是如何构建它并且我无法控制它。
(如何)是否可以让所有用户与多个用户组关联?
答案 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();
}