我有一個擁有數個數據庫的客戶端,這個數據庫有幾個相當大的和相互關係的模型。在我們生產的$ hasOne關係中,我們遇到了一個奇怪的「錯誤」。問題是這樣的:CakePHP沒有爲hasOne關係拉動超過一定數量的行
模型UsersItems與用戶具有$ hasOne關係。它是如下
var $hasOne = array(
'Author' => array(
'className' => 'User',
'foreignKey' => 'id'
)
);
這拉動並用(具有選定他們爲「書籤」,這也屬於在用戶的上下文中的用戶)的別名「作者」爲這些項加入用戶數據。
如果UserItem有一個id
,比如說3445(表格當前大小範圍的更多中間值),它就可以很好地實現。
但是,如果UserItem具有(例如表格當前大小的上限範圍)的id
,那麼$ hasOne無法從find()
中提取任何信息。因此,似乎更新的「書籤」項目不檢索作者數據,而其他人(「舊」)做得很好。
這會導致什麼?
添加的信息
查詢如下:
SELECT `UsersItem`.`id`, `UsersItem`.`user_id`, `UsersItem`.`item_id`,
`UsersItem`.`in_list`, `User`.`id`, `User`.`username`, `User`.`password`,
`User`.`email`, `User`.`group_id`, `User`.`resethash`, `User`.`confirmhash`,
`User`.`confirmed`, `Item`.`id`, `Item`.`user_id`, `Item`.`name`,
`Item`.`category_id`, `Item`.`description`, `Item`.`pagelink`,
`Item`.`purchaselink`, `Item`.`moderated`, `Item`.`image_filename`,
`Item`.`votecount`, `Item`.`parent_id`, `Item`.`discover_order`,
`Item`.`created`, `Item`.`slug`, `Item`.`normalized_name`,
((`Item`.`votecount`)/pow((3600*TIMEDIFF(`Item`.`created`, NOW()) + 12), .42)) AS `Item__rank`,
`Author`.`id`, `Author`.`username`, `Author`.`password`, `Author`.`email`,
`Author`.`group_id`, `Author`.`resethash`, `Author`.`confirmhash`,
`Author`.`confirmed`
FROM `users_items` AS `UsersItem`
LEFT JOIN `users` AS `User` ON (`UsersItem`.`user_id` = `User`.`id`)
LEFT JOIN `items` AS `Item` ON (`UsersItem`.`item_id` = `Item`.`id`)
LEFT JOIN `users` AS `Author` ON (`Author`.`id` = `UsersItem`.`id`)
WHERE `UsersItem`.`user_id` = 1118
AND `UsersItem`.`in_list` = 1
ORDER BY `UsersItem`.`id` DESC
第二個增補
這個查詢確實工作:
SELECT `UsersItem`.`id`, `UsersItem`.`user_id`, `UsersItem`.`item_id`, `UsersItem`.`in_list`, `User`.`id`, `User`.`username`, `User`.`password`, `User`.`email`, `User`.`group_id`, `User`.`resethash`, `User`.`confirmhash`, `User`.`confirmed`, `Item`.`id`, `Item`.`user_id`, `Item`.`name`, `Item`.`category_id`, `Item`.`description`, `Item`.`pagelink`, `Item`.`purchaselink`, `Item`.`moderated`, `Item`.`image_filename`, `Item`.`yeekcount`, `Item`.`parent_id`, `Item`.`discover_order`, `Item`.`created`, `Item`.`slug`, `Item`.`normalized_name`, ((`Item`.`yeekcount`)/pow((3600*TIMEDIFF(`Item`.`created`, NOW()) + 12), .42)) AS `Item__rank`, `Author`.`id`, `Author`.`username`, `Author`.`password`, `Author`.`email`, `Author`.`group_id`, `Author`.`resethash`, `Author`.`confirmhash`, `Author`.`confirmed` FROM `users_items` AS `UsersItem` LEFT JOIN `users` AS `User` ON (`UsersItem`.`user_id` = `User`.`id`) LEFT JOIN `items` AS `Item` ON (`UsersItem`.`item_id` = `Item`.`id`) LEFT JOIN `users` AS `Author` ON (`Author`.`id` = `Item`.`user_id`) WHERE `UsersItem`.`user_id` = 1118 AND `UsersItem`.`in_list` = 1 ORDER BY `UsersItem`.`id` DESC
注意,在這個特殊的位的區別:
LEFT JOIN `users` AS `Author` ON (`Author`.`id` = `Item`.`user_id`)
我是拉錯id
作爲作者的ID前面,所以我知道這是問題;現在我想弄清楚如何讓蛋糕生成這個正確的查詢...
什麼是生成的SQL查詢,它是如何失敗的? – deceze 2011-04-28 05:22:44
我會盡快更新。 – dclowd9901 2011-04-28 14:50:17
向原問題添加新信息。 – dclowd9901 2011-04-30 18:06:05