作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我最近有一个关于 Finding records via conditions in habtm 的问题。现在,我可以在我搜索的类别中搜索帖子。
现在,我的问题是如何检索每个帖子的类别。有时,一篇文章在此查询中包含一个或多个类别:
$this->set('posts', $this->Category->find(
'first',
array(
'conditions' => array(
'Category.uri' => $uri
),
'contain' => array('Post')
)
));
我想象这样的事情:
$this->set('posts', $this->Category->find(
'first',
array(
'conditions' => array(
'Category.uri' => $uri
),
'contain' => array('Post' => array(
'contain' => 'Category'
))
)
));
这是我的模型的样子。
// Category Model
class Category extends AppModel {
var $name = 'Category';
var $hasAndBelongsToMany = array(
'Post' => array(
'className' => 'Post'
)
);
var $actsAs = array('Containable');
}
// Post Model
class Post extends AppModel {
var $name = 'Post';
var $hasAndBelongsToMany = array(
'Category' => array(
'className' => 'Category'
)
);
var $actsAs = array('Containable');
var $virtualFields = array(
'date_posted' => 'DATE_SUB(Post.created, INTERVAL 7 DAY)'
);
}
示例数据如下:
categories
id name
1 holidays
2 destinations
posts
id title
1 I am a post
2 I am another post
categories_posts
post_id category_id
1 1
2 2
2 1
我正在检索假期的帖子。
Array
(
[Category] => Array
(
[id] => 3
[name] => holidays
[uri] => holidays
[created] => 2010-11-25 20:43:03
[modified] => 2010-11-25 20:43:03
)
[Post] => Array
(
[0] => Array
(
[id] => 1
[title] => I am a post
),
[1] => Array
(
[id] => 2
[title] => I am a another post
)
)
)
问题是其中 1 个帖子属于两个类别。我也希望获得这些信息。
最佳答案
关闭。试试这个:
$this->set('posts', $this->Category->find(
'first',
array(
'conditions' => array(
'Category.uri' => $uri
),
'contain' => array('Post' => array('Category'))
)
));
像这样编写 Controller 代码有问题:
您可以通过将 find 调用移至模型方法来令人满意地纠正这些问题:
// Categories Controller
$this->set('posts', $this->Category->get_posts_with_cats($uri));
// Category Model
function get_posts_with_cats($uri) {
$this->find('first', array(
'conditions' => array('Category.uri' => $uri),
'contain' => array('Post' => array('Category'))
));
}
这使您的代码更棒:
PostsController
中,您可以调用:$this->Post->Category->get_posts_with_cats($uri);
。您的代码现在是 DRY .在您学习如何像我向您展示的那样嵌套可容纳模型之后,您将来可能会想做这样的事情:
$this->find('first', array(
'conditions' => array('Category.uri' => $uri),
'contain' => array(
'Post' => array(
'Category' => array(
'Tag' => array('Author')
)
)
)
));
好消息?您将从上述方法中获得所需的模型数据(只要您定义了所有这些关系)。
可怕的消息? CakePHP 不知道如何优化此类深层关联的查询。因此,随着数据库的增长,您最终将会对数据库进行数十个(如果不是数百个(如果不是数千个))SELECT
查询,从而有效地使您的应用程序陷入困境(如果不是< em>停下来。)
设计 CakePHP 的优秀人员正在为 CakePHP 2.0 开发更好的可控制行为,但您必须等到那时才能获得这种精度级别。
关于cakephp - 如何在 CakePHP 的包含模型中查找类别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4306957/
我是一名优秀的程序员,十分优秀!