我想列出属于指定用户组的所有fe_users。如果用户只分配了一个用户名组(),那么下面的工作得很好
$users = $this->userRepository->findByUsergroup($this->settings['fachgruppe']);
$this->view->assign('users', $users);
但是会有超过一个组分配的用户,结果将是空的。这些用户组不是m:n关系,而是一个逗号分隔的字符串,看起来是:11,12,28
,但这是如何构建的,我对此没有控制权。
(如何)是否有可能使所有用户都与多个用户组相关联?
发布于 2018-02-13 13:22:45
对于多个查询值和单个值属性,通常使用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();
}
发布于 2018-02-13 13:23:09
由于这是TYPO3存储设置的旧方式,您可以使用旧的方法查找关系:通过如下简单的SQL查询来实现:
SELECT *
FROM fe_users
WHERE concat(",", usergroups, ",") LIKE "%,3,%"
连接必须有一个适当的字符串来正确地比较和标识该组(在存储与组13相关的查找组3时不出现假阳性)。
发布于 2018-02-14 04:32:37
尝试使用下面的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();
}
https://stackoverflow.com/questions/48767601
复制相似问题