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'
虛擬域根本不被識別。 我做錯了什麼?
更新: 我發現我不得不這樣稱呼它:
'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