【发布时间】:2016-06-21 14:07:12
【问题描述】:
这是一个很奇怪的问题,我很长时间都无法弄清楚。
我有一个模型 Upload,其中几个 hasMany 都被 UploadModel 忽略了。
例如。 上传有很多面孔。
在 cmets 表上,我有一个名为 foreign_key 的字段,它承载 Upload.id。 所以 UploadModel 中的关系是这样的:
$hasMany = ['Face' => ['foreignKey' => 'Face.upload_id']];
在上传中执行包含 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 应该可以工作!!!!他妈的!!!!!!
我希望 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
感谢您的帮助,谢谢。
【问题讨论】:
标签: php mysql cakephp models cakephp-2.8