这是一个很奇怪的问题,我很长时间都无法弄清楚。
我有一个模型Upload,其中几个hasMany都被UploadModel忽略了。
例如。上传hasMany Face。
在评论表上,我有一个名为 foreign_key 的字段,它承载 Upload.id。所以 UploadModel 中的关系是这样的:
$hasMany = ['Face' => ['foreignKey' => 'Face.upload_id']];
当在 Upload 中执行包含 Face + 条件[Face.celebrity_id = 4018]的查找时,我收到以下错误,因为查询缺少 Left Join to Face:
$media = $this->Upload->find('all',array(
'conditions' => array(
'Face.celebrity_id' => 4018
),
'contain' => array(
'Face'
)
));
SQL Query:
SELECT `Upload`.`id`, `Upload`.`user_id`, `Upload`.`filename`, `Upload`.`created`
FROM `uploads` AS `Upload`
WHERE `Face`.`celebrity_id` = 4018;
SQL Error:
Unknown column 'Face.celebrity_id' in 'where clause'
如您所见,查询缺少与 Face 的左连接,这就是问题所在
如果不是在 $hasMany 中,而是在 $belongsTo 中添加 Face 关系,它会将关系添加到查询中并且它可以工作!
但是一个 Upload 可以有很多 Faces,并且 Face.upload_id 有要上传的 foreignKey,所以它需要是一个母亲 ***** HASMANY...lol
如您所见,这太糟糕了,我已经绝望了,我通过在每个查询之前添加一个 bindModel() 绕过了这个问题,但这完全没有必要,hasMany 应该可以工作!!!!F****!!!!!
我希望 Cake 为我执行的查询是这样的:
SELECT `Upload`.`id`, `Upload`.`filename` FROM `uploads` AS `Upload`
LEFT JOIN `upload_faces` AS `Face` ON (`Upload`.id = `Face`.`upload_id`)
WHERE `Face`.`celebrity_id` = 4018
我感谢任何帮助,谢谢。