我需要蛋糕控制器php文件中的蛋糕sql
SELECT Time(NOW()),
evaluation_start_time,
AddTime(evaluation_start_time, CONCAT(evaluation_hour_after, ':00:00')) temp_start_time,
AddTime(evaluation_start_time, CONCAT(evaluation_hour_after, ':14:00')) temp_end_time,
(SELECT count(id)
FROM evaluation_user_ratings
WHERE evaluation_id = evaluation.id) player_rating_given,
(SELECT count(id)
FROM evaluations_users_and_team
WHERE evalution_id = evaluation.id) player_count,
(SELECT rating_added_by
FROM evaluation_user_ratings
WHERE evaluation_id = evaluation.id) AS puser_id,
evaluation.*
FROM evaluation
WHERE evaluation_date >= date(NOW())
AND (evaluation_day_after != 0
OR evaluation_hour_after != 0)
AND evaluation_status = '1'
HAVING player_count >= player_rating_given
AND Time(NOW()) >= temp_start_time
AND Time(NOW()) <= temp_end_time
如果我正确阅读了您的查询,并且列player_count(evalution_id)可能存在拼写错误..; 对于 Cakephp 4.0,您有两个选择,即使用 queryBuilder 或 连接管理器
对于原始 SQL 来说最简单的是连接管理器,您必须事先在控制器和/或父控制器中调用库
1.
use Cake\Datasource\ConnectionManager;
基本如图所示
$connection = ConnectionManager::get('default');
$query = "SELECT
Time(NOW()),
Evaluation.evaluation_start_time,
AddTime(Evaluation.evaluation_start_time, CONCAT(Evaluation.evaluation_hour_after, ':00:00')) temp_start_time,
AddTime(Evaluation.evaluation_start_time, CONCAT(Evaluation.evaluation_hour_after, ':14:00')) temp_end_time,
(SELECT count(EvaluationUserRatings.id) FROM evaluation_user_ratings EvaluationUserRatings WHERE EvaluationUserRatings.evaluation_id = Evaluation.id) player_rating_given,
(SELECT count(EvaluationsUsersAndTeam.id) FROM evaluations_users_and_team EvaluationsUsersAndTeam WHERE EvaluationsUsersAndTeam.evaluation_id = Evaluation.id) player_count,
(SELECT EvaluationUserRatings.rating_added_by FROM evaluation_user_ratings EvaluationUserRatings WHERE EvaluationUserRatings.evaluation_id = Evaluation.id) AS puser_id,
Evaluation.*
FROM evaluation Evaluation
WHERE Evaluation.evaluation_date >= date(NOW())
AND (Evaluation.evaluation_day_after != 0
OR Evaluation.evaluation_hour_after != 0)
AND Evaluation.evaluation_status = '1'
HAVING player_count >= player_rating_given
AND Time(NOW()) >= temp_start_time
AND Time(NOW()) <= temp_end_time";
$results = $connection->execute($query)->fetchAll('assoc');
如果您决定使用 queryBuilder,我相信这是一个接近的表示和/或示例,可以让您接近您的目标。
$evaluations = $this->getTableLocator()->get('Evaluation');
$queryA = $evaluations->find()
->selectAllExcept($evaluations,['Evaluation.evaluation_state_time']);
$evaltest = $queryA
->select([
'Time(NOW())',
'Evaluation.evaluation_start_time',
'temp_start_time'=>'AddTime(Evaluation.evaluation_start_time, CONCAT(Evaluation.evaluation_hour_after, \':00:00\'))',
'temp_end_time'=>'AddTime(Evaluation.evaluation_start_time, CONCAT(Evaluation.evaluation_hour_after, \':14:00\'))'
])
->select([
'player_rating_given'=>$evaluations->EvaluationUserRatings->find()
->select(['count(EvaluationUserRatings.id)'])
->where([
'EvaluationUserRatings.evaluation_id'=>'Evaluation.id'
]),
'player_count'=>$evaluations->EvaluationsUsersAndTeam->find()
->select(['count(EvaluationsUsersAndTeam.id)'])
->where([
'EvaluationsUsersAndTeam.evaluation_id'=>'Evaluation.id'
]),
'puser_id'=>$evaluations->EvaluationUserRatings->find()
->select(['EvaluationUserRatings.rating_added_by'])
->where([
'EvaluationUserRatings.evaluation_id'=>'Evaluation.id'
])
])
->where([
'Evaluation.evaluation_date >= date(NOW())',
'Evaluation.evaluation_status'=>1,
'OR'=>[
'Evaluation.evaluation_day_after !='=>0,
'Evaluation.evaluation_hour_after !='=>0
]
])
->having([
'player_count >= player_rating_given',
'Time(NOW()) >= temp_start_time',
'Time(NOW()) <= temp_end_time'
]);
这将返回一个对象,您只需将 ->toArray(); 添加到上面的 queryBuilder 的末尾即可将其转换为数组。
Connection Manager 查询与原始 sql 相同,而 queryBuilder sql 转储如下:
SELECT
Evaluation.id AS Evaluation__id,
Evaluation.evaluation_date AS Evaluation__evaluation_date,
Evaluation.evaluation_day_after AS Evaluation__evaluation_day_after,
Evaluation.evaluation_hour_after AS Evaluation__evaluation_hour_after,
Evaluation.evaluation_status AS Evaluation__evaluation_status,
Evaluation.evaluation_start_time AS Evaluation__evaluation_start_time,
Evaluation.Time(NOW()) AS Evaluation__Time(NOW()),
AddTime(Evaluation.evaluation_start_time, CONCAT(Evaluation.evaluation_hour_after, ':00:00')) AS temp_start_time,
AddTime(Evaluation.evaluation_start_time, CONCAT(Evaluation.evaluation_hour_after, ':14:00')) AS temp_end_time,
(SELECT count(EvaluationUserRatings.id) AS count(EvaluationUserRatings__id) FROM evaluation_user_ratings EvaluationUserRatings WHERE EvaluationUserRatings.evaluation_id = :c0) AS player_rating_given,
(SELECT count(EvaluationsUsersAndTeam.id) AS count(EvaluationsUsersAndTeam__id) FROM evaluations_users_and_team EvaluationsUsersAndTeam WHERE EvaluationsUsersAndTeam.evaluation_id = :c1) AS player_count,
(SELECT EvaluationUserRatings.rating_added_by AS EvaluationUserRatings__rating_added_by FROM evaluation_user_ratings EvaluationUserRatings WHERE EvaluationUserRatings.evaluation_id = :c2) AS puser_id
FROM
evaluation Evaluation
WHERE
(Evaluation.evaluation_date >= date(NOW())
AND Evaluation.evaluation_status = :c3
AND (Evaluation.evaluation_day_after != :c4 OR Evaluation.evaluation_hour_after != :c5))
HAVING (
player_count >= player_rating_given
AND Time(NOW()) >= temp_start_time
AND Time(NOW()) <= temp_end_time
)
希望有帮助。祝你好运。