0
저는 계산 된 필드를 CakePHP의 모델에 추가하는 방법을 알아 내려고했습니다. 나는 다음과 같은 쿼리를 사용하여 원하는 결과를 얻을 수 있어요 :CakePHP : 다른 모델의 계산 된 필드를 모델에 결합하기
SELECT project_id,
COUNT(*) AS clicks_total,
SUM(CASE WHEN clicks.redirect_url = projects.url THEN 1 ELSE 0 END) AS clicks_redirected,
SUM(CASE WHEN clicks.redirect_url = projects.url THEN 0 ELSE 1 END) AS clicks_not_redirected
FROM clicks
LEFT JOIN projects ON clicks.project_id = projects.id
GROUP BY project_id
나는 사용자 지정 쿼리 케이크로 실행하려고하면 그것을 사용할 수있을 정도 배열 조작을 필요로하는 방식으로 결과를 변환합니다. 나는 그것을 다음 코드로 케이크 방법을 시도하지만, 어떤 이유로 계산 된 필드가보기에 이상 동작이 발생합니다 별도의 배열에 결국 :
array(
(int) 0 => array(
'Project' => array(
'id' => '508705c8-126c-48f9-bd9a-6d79d13bb9ea',
'name' => 'Test Project',
'url' => 'http://www.test.com',
'url_mac' => 'http://www.mac.com',
'url_mobile' => 'http://www.mobile.com'
),
(int) 0 => array(
'clicks_total' => '80',
'clicks_redirected' => '35',
'clicks_not_redirected' => '45'
)
),
(int) 1 => array(
'Project' => array(
'id' => '508b1073-2aa8-4895-b8d9-152ed13bb9ea',
'name' => 'Another Project',
'url' => 'http://another.com',
'url_mac' => 'http://anothermac.com',
'url_mobile' => 'http://anothermobile.com'
),
(int) 0 => array(
'clicks_total' => '134',
'clicks_redirected' => '70',
'clicks_not_redirected' => '64'
)
)
)
:
$this->paginate = array(
'Project' => array(
'fields' => array(
'id', 'name', 'url', 'url_mac', 'url_mobile',
'COUNT(*) AS clicks_total',
'SUM(CASE WHEN Click.redirect_url = Project.url THEN 1 ELSE 0 END) AS clicks_redirected',
'SUM(CASE WHEN Click.redirect_url = Project.url THEN 0 ELSE 1 END) AS clicks_not_redirected'
),
'joins' => array(
array(
'table' => 'clicks',
'alias' => 'Click',
'type' => 'LEFT',
'conditions' => array('Click.project_id = Project.id')
)
),
'group' => 'project_id'
));
$this->set('projects', $this->paginate());
는 다음과 같은 결과를 생성합니다
계산 된 클릭 수를 얻는 데 도움이되는 아이디어가 있습니까?
굉장합니다. – Ted
'공개 = $ virtualFields 어레이 ( \t \t 'clicks_total'=> 'COUNT (*)' \t \t 'clicks_redirected'=> 'SUM (CASE WHEN Click.redirect_url = Project.url THEN 1 ELSE 0 END)' , \t \t는 => 'SUM (CASE WHEN Click.redirect_url = Project.url THEN 0 ELSE 1 END)'clicks_not_redirected ' \t)' – Ted
단지 특정 방법 가상 필드를 정의 할 수있다? 가상 필드를 다른 모든 방법을 위반 한 모델에 추가했을 때. – Ted