Cakephp多表關聯的從表查詢筆記

不能否認Cakephp對於查詢的封裝是有限制的,可是經過利用Cakephp的語法規則,能夠很好的彌補這一點。 咱們在應用中遇到的問題: {查詢Note的ID小於10的全部User,User表和Note表是一對多關聯} 咱們一般的作法是 $users = $this->User->find('all',array( 'conditions' => array( 'Note.id <' => 10 ) )); 注意:這種作法是錯誤的。 緣由是: Cakephp對於hasMany的關聯,會生成下列的語句 SELECT `User`.`id`, `User`.`name`, `User`.`username`, `User`.`password`, `User`.`created` FROM `users` AS `User` WHERE `Note`.`id` < 10 能夠看到,Note表並無被Join到查詢中,因此,MySql會提示 Unknown column 'Note.id' in 'where clause' 咱們應該怎樣查詢條件從屬於關聯表的記錄呢? 簡單介紹一下Cakephp的四種關聯模式對應的從屬關聯條件的方法。 1. 最簡單的hasOne和belongsTo關聯 這類的關聯咱們能夠直接寫關聯表的條件,而不會出現Unknow column的錯誤。 2. 稍稍複雜的hasMany關聯(一對多關聯) 就像你在上面看見的,hasMany關聯是不能直接實現上述的查詢條件的,可是咱們能夠變通一下,咱們能夠把hasMany關聯查詢轉換爲belongsTo關聯查詢,按照上面的條件,咱們再試一試 $users = $this->User->Note->find('all',array( 'conditions' => array( 'Note.id <' => 10 ), 'contain' => array('User'), 'fields' => array( 'Note.id', 'User.id', 'User.name' ) )); 此次獲得的結果相似於下面的數據 Array ( [0] => Array ( [...]
相關文章
相關標籤/搜索