我正在尝试查找与某个类别相关联的类别中的帖子。现在,我有这个:
$this->set('posts', $this->Category->Post->find('all', array('conditions' => array('Category.uri' => $uri))));
但这似乎不起作用。错误显示:
Warning (512): SQL Error: 1054: Unknown column 'Category.uri' in 'where clause' [CORE/cake/libs/model/datasources/dbo_source.php, line 684]
..<snipped>...
Query: SELECT `Post`.`id`, `Post`.`title`, `Post`.`uri`, `Post`.`body`, `Post`.`created`, `Post`.`modified` FROM `posts` AS `Post` WHERE `Category`.`uri` = 'holidays'.
我已经读过,当你在模型之间有HABTM时,你应该能够像这样检索它。但是,显示的SQL不会加入类别表。
// Category Model
class Category extends AppModel {
var $name = 'Category';
var $hasAndBelongsToMany = array(
'Post' => array(
'className' => 'Post'
)
);
}
// Post Model
class Post extends AppModel {
var $name = 'Post';
var $hasAndBelongsToMany = array(
'Category' => array(
'className' => 'Category'
)
);
}
答案 0 :(得分:4)
当你有HABTM时,我已经读过了 在模型之间,你应该能够 像这样检索它。
我不知道你在哪里读到这个,但你的来源是错误的。 Cake's documentation of HABTM associations处理与您的情况几乎相同的情景,以及实现您所追求的结果所需的步骤。
My answer to another question about HABTM可能有助于了解Cake的ORM如何在幕后工作。
答案 1 :(得分:0)
这似乎有效。有没有更有效的方法来做到这一点?
$options['joins'] = array(
array('table' => 'categories_posts',
'alias' => 'CategoriesPosts',
'type' => 'LEFT',
'conditions' => array(
'Category.id = CategoriesPosts.category_id'
)
),
array('table' => 'posts',
'alias' => 'Post',
'type' => 'LEFT',
'conditions' => array(
'CategoriesPosts.post_id = Post.id',
)
)
);
$options['conditions'] = array(
'Category.uri' => $uri
);
$options['fields'] = array(
'DISTINCT(Category.uri), Post.*, Category.*'
);
$this->set('posts', $this->Category->find('all', $options));
答案 2 :(得分:0)
这是更有效的代码:
$this->set('posts', $this->Category->find(
'first',
array(
'conditions' => array(
'Category.uri' => $uri
),
'contain' => array('Post')
)
));