更新
我一直在使用phpMyAdmin中的纯SQL进行尝试,我认为我有了一个答案,我希望有人能看一下查询本身是否存在任何问题。
此外,我不确定继续操作的最佳方法是什么,我知道在Doctrine(Symfony)中很容易转到运行SQL查询。我知道在CakePHP中也应该可以这样做,但是使用查询构建器构建查询是否更好呢?
SQL查询:
SELECT userlevel_id AS userlevelID, COUNT( * ) AS count
FROM users
WHERE account_id = 38 <-var id here
GROUP BY userlevel_id
我正在使用CakePHP 3.X,并希望按帐户分组/计算每个用户的级别,这是我“曾经”做过的事情。
例如,我有三个这样的查找调用,一个用于管理员,一个用于经理和一个用于用户。
$CountManagers = $UsersTable->find('all') //Get current total of managers
->where(['Users.account_id' => $AccountID, 'Userlevels.userlevel' => 'Manager'])
->contain(['Userlevels'])
->count();
我会为每个用户级别构建所需的数组,计算是否比“账户”级别设置的更多/更少。
例如,
if ($CountAdmins < $PackageAdmins) { $ListAccessLevels['2'] = 'Admin'; }
if ($CountManagers < $PackageManagers) { $ListAccessLevels['3'] = 'Manager'; }
if ($CountUsers < $PackageUsers) { $ListAccessLevels['4'] = 'User'; }
但我知道这样做是错误的,我希望只有一个查找调用,并让它为我返回数组。
该系统大约有4个不同的级别,每个级别都有许多用户、管理员和管理员(其中一些设置为NULL,表示无限制)。
目前为止,我已经完成了以下工作:
$GetTest = $UsersTable->find('all')
->where(['account_id' => $AccountID*])
->contain(['Userlevels'])
->toArray();
这将返回所有当前用户的所有用户,$AccountID
获取当前登录用户的AccountID。
因此,我得到了一个包含六个用户(1个管理员,1个经理和4个用户)的列表(测试帐户)。当我添加组时,例如:
$GetTest = $UsersTable->find('all')
->where(['account_id' => $AccountID*])
->group('userlevel_id')
->contain(['Userlevels'])
->count();
这会返回3,不是我需要的!所以我在看子查询,然后计算每个userlevel_id
,但我不确定如何做到这一点?
谢谢。
- 如果我没有包含任何必要的内容,请让我知道,我会更新我的问题...