蛋糕控制器php中的蛋糕sql是什么

问题描述 投票:0回答:1

我需要蛋糕控制器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
cakephp
1个回答
0
投票

如果我正确阅读了您的查询,并且列player_count(evalution_id)可能存在拼写错误..; 对于 Cakephp 4.0,您有两个选择,即使用 queryBuilder 或 连接管理器

对于原始 SQL 来说最简单的是连接管理器,您必须事先在控制器和/或父控制器中调用库

1.

use Cake\Datasource\ConnectionManager;
  1. 在控制器的函数中,在保留 Cakephp 的表/实体命名结构的同时,在下面几行周围进行一些操作。

基本如图所示

$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
    ) 

希望有帮助。祝你好运。

© www.soinside.com 2019 - 2024. All rights reserved.