0
후 나는이 발견 문을 생성하지만 예상대로 작동하지 않는 몇 가지 조사 :CakePHP의 3.x를 하위 선택
public $virtualFields = array(
'count' => "SELECT COUNT(plans_trainings.id) FROM plans_trainings, trainings, projects WHERE plans_trainings.training_id = trainings.id AND projects.location_id = locations.id AND plans_trainings.project_id = projects.id"
);
public function trainingsPerLocationChartData(){
$this->loadModel('Locations');
$locationsDiagramData = $this->Locations->find('all', array(
'fields' => array(
'locations.id',
'locations.description',
'locations.count' /* virtuel field */
)
));
성명은 다음과 같이 표시됩니다
'sql' => 'SELECT locations.id AS `locations__id`, locations.description AS `locations__description`, locations.count AS `locations__count` FROM locations Locations'
가상 필드가 전혀 인식되지 않습니다. 내가 뭘 잘못 했니?
UPDATE :
'count' => "(SELECT COUNT(plans_trainings.id) FROM plans_trainings, trainings, projects WHERE plans_trainings.training_id = trainings.id AND projects.location_id = locations.id AND plans_trainings.project_id = projects.id) AS `counter`"
내가()로 추가 된 선택 주위 : 은 내가 같이 호출 할 필요가 있음을 발견했다.
$locationsDiagramData = $this->Locations->find('all')
->select(['locations.id', 'locations.description', $this->virtualFields['count']]);
하지만 여전히 잘못된 SQL 구문 얻을 :
SELECT locations.id AS `locations__id`, locations.description AS `locations__description`, (SELECT COUNT(plans_trainings.id) FROM plans_trainings, trainings, projects WHERE plans_trainings.training_id = trainings.id AND projects.location_id = locations.id AND plans_trainings.project_id = projects.id) AS `counter` AS (SELECT COUNT(plans_trainings__id) FROM plans_trainings, trainings, projects WHERE plans_trainings FROM locations Locations
"마지막"문제는 AS counter
이후에만이 부분을 보인다 :
AS (SELECT COUNT (plans_trainings__id) FROM을 계획 _ 교육, 교육, 프로젝트 계획 _ 경로 계획
이것은 성명을 어기는 것입니다! 아이디어를 해결하는 방법은 무엇입니까? phpmyadmin에서 명령문을 실행하고 언급 된 부분을 제거하면 명령문이 올바르게 작동하고 올바른 결과를 얻을 수 있습니다!
업데이트 2 : 이 일반 성명 :
select
locations.id,
locations.description,
(
select
count(plans_trainings.id)
from
plans_trainings,
trainings,
projects
where
plans_trainings.training_id = trainings.id
and projects.location_id = locations.id
and plans_trainings.project_id = projects.id
) as 'Anzahl'
from
locations;
CakePHP의 3에는 가상 필드는 더 이상 없다 ... [적절한를 사용하는 컨트롤러에이 시도 ** 하위 쿼리 **] (http://book.cakephp.org/3.0/en/orm/query-builder.html#subqueries)를 선택하고 [**'select()'**] (http : // book. cakephp.org/3.0/en/orm/query-builder.html#selecting-data). – ndm