我试图对一个名为uploads的模型执行一个查询,在该模型中,我搜索所有具有给定标记的上传。我使用的是CakeDC标签插件,我正在使用本教程中的http://mark-story.com/posts/view/using-bindmodel-to-get-to-deep-relations。我试图克服这样一个事实,即插件默认提供两个查询(不能搜索)。
因此,我试图通过bindModel函数进行连接:
$this->Upload->Behaviors->load('Containable');
$this->Upload->unbindModel(array(
'hasAndBelongsToMany' => array('Tag')
));
$this->Upload->bindModel(array(
'hasOne' => array(
'Tagged' => array(
'className' => 'Tags.Tagged',
'foreignKey' => false,
'conditions' => array('Tagged.foreign_key = Upload.id')
),
'Tag' => array(
'foreignKey' => false,
'conditions' => array('Tag.id = Tagged.tag_id')
)
)
));
$tag = $this->Upload->find('all', array(
'contain' => array('Tag'),
'conditions' => array( 'Tag.name' => $tagname)
));然而: SQLSTATE42S22:列未找到:在'on子句‘中有1054个未知列'Tagged.tag_id’
我相信这可能是因为标记只是一个连接表,而不是一个合适的模型。我怎样才能让这张桌子像我需要的那样连接起来?
SQL转储: SQL查询:
SELECT
Upload.id,
Upload.name,
Upload.description,
Upload.created,
Upload.modified,
Upload.filetype,
Upload.numberofviews,
Upload.numberofdownloads,
Upload.model_dir,
Upload.model,
Upload.owner,
Upload.license,
Upload.category,
Upload.default_picture,
Upload.soft_delete,
Tag.id,
Tag.identifier,
Tag.name,
Tag.keyname,
Tag.weight,
Tag.created,
Tag.modified
FROM
database.uploads AS Upload
LEFT JOIN
database.tags AS Tag ON (Tag.id = Tagged.tag_id)
WHERE
1 = 1 发布于 2013-07-30 19:17:08
和相关的https://github.com/CakeDC/tags/wiki/Find-tagged-objects一样,答案是根本不做一个连接,让插件为我做这个工作。
$tag = $this->Upload->Tagged->find('tagged', array('by' => $tagname, 'model' => 'Upload', 'link' => 'User' ));遗憾的是,似乎在查询中忽略了上传相关的信息。我肯定我会想办法绕过它的。
发布于 2013-07-30 17:25:02
如果你不让关联在它所属的插件中查找模型,它就找不到模型,这是正常的。这不是插件的问题,而是你的联想。
'hasOne' => array(
'Tagged' => array(
'className' => 'Tags.Tagged',
'foreignKey' => false,请参见className的插件名前缀。标签模型也是如此。看那本书。
https://stackoverflow.com/questions/17952579
复制相似问题