C0o*_*d3r 2 mysql cakephp cakephp-3.0
UPDATE
我一直在使用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
Run Code Online (Sandbox Code Playgroud)
所以我使用CakePHP 3.X,并希望按帐户对每个用户级别进行分组/统计,这就是我正在做的事情,
例如,我有三个这样的查找呼叫,一个用于管理员,经理和用户.
$CountManagers = $UsersTable->find('all') //Get current total of managers
->where(['Users.account_id' => $AccountID, 'Userlevels.userlevel' => 'Manager'])
->contain(['Userlevels'])
->count();
Run Code Online (Sandbox Code Playgroud)
然后,我会计算出每个用户级别所需的数组,计算出"帐户"级别是否比帐户级别设置的更多/更少.
例如,
if ($CountAdmins < $PackageAdmins) { $ListAccessLevels['2'] = 'Admin'; }
if ($CountManagers < $PackageManagers) { $ListAccessLevels['3'] = 'Manager'; }
if ($CountUsers < $PackageUsers) { $ListAccessLevels['4'] = 'User'; }
Run Code Online (Sandbox Code Playgroud)
但我知道这是错误的,并希望只有一个查找调用,并让它为我返回数组.
此系统有大约4个不同的级别,每个级别都有许多用户,管理员和管理员(其中一些设置为NULL,无限制).
所以这就是我到目前为止所做的,
$GetTest = $UsersTable->find('all')
->where(['account_id' => $AccountID*])
->contain(['Userlevels'])
->toArray();
Run Code Online (Sandbox Code Playgroud)
*返回所有当前用户的所有用户,$AccountID获取登录用户的当前AccountID.
所以我得到了六个用户的列表,1个管理员,1个管理员和4个用户.(测试帐户).当我添加组,像,
$GetTest = $UsersTable->find('all')
->where(['account_id' => $AccountID*])
->group('userlevel_id')
->contain(['Userlevels'])
->count();
Run Code Online (Sandbox Code Playgroud)
这返回3,而不是我需要的!所以我在看一个子查询,然后计算每个,userlevel_id但我不知道该怎么做?
谢谢,
我相信这是解决方案,需要更多工作,但似乎从大量的跟踪和错误中,在CakePHP中给出与在phpMyAdmin中运行的SQL(见上文)相同的结果.
$Query = $UsersTable->find('all');
$Query->select([
'userlevel_id',
'count' => $Query->func()->count('*')
])
->where(['account_id' => $AccountID])
->group('userlevel_id');
foreach ($Query as $row) {
debug($row);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10552 次 |
| 最近记录: |