0
我有這樣一個模型關係:CakePHP的分頁用的hasMany通過關係
Person belongsTo Counselor, PersonType, Program, Term
Person hasMany PersonStage, Text, Mail
PersonStage belongsTo Person, Stage
Stage hasMany PersonStage
從本質上講,我創建了一個多到多階段和人之間的關係,但PeronStage表(people_stages)
有一些額外的信息,最重要的是一個created
字段。
什麼,我試圖做的是找到和分頁的結果,往往是根據人的當前 PersonStage,這將永遠是最新的(一個MAX(people_stages.created)
)
我不知道如何做到這在Cake中。我知道在SQL中,連接查詢如下,但我不知道如何在Cake中複製它。
SELECT *
FROM people AS p LEFT JOIN (people_stages AS s NATURAL JOIN (
SELECT person_id, MAX(created) created
FROM people_stages
GROUP BY person_id
) t) ON s.person_id = p.id
ORDER BY p.last_name
我試過各種連接,都無濟於事。這裏是我的代碼,而這些連接:你應遵循
$this->Paginator->settings = array(
'recursive' => -1,
'contain' => array('Counselor','Term','Program','PersonType'),
'fields' => array('Person.*', 'Counselor.id', 'Counselor.first_name', 'Counselor.last_name', 'Term.*', 'Program.*', 'PersonType.*'),
'order' => array('Person.counselor_read' => 'asc', 'PersonStage.create' => 'desc'),
'limit' => 25
);
$people = $this->Paginator->paginate('Person');
謝謝。我需要將分頁設置保留在方法內部,因爲它們與管理方面不同 - 與公共方面有不同的要求。分頁正在工作,這只是我無法弄清楚的連接。 – Pete
您對模型使用可容忍的行爲嗎?如果沒有在你的行動中加載它,你可以通過 '$ this-> Person-> Behaviors-> load('Containable');' –
是的,絕對使用Containable。問題是,我想選擇最近的階段,而不是用戶曾經擁有過的所有階段。 – Pete