我尝试以下方法来获取属于MenuItem 6的文章,并且文章内容类型为“博客”。它找到了content_type='blog'
的所有文章。但我只希望它返回文章,如果它属于Menuitem 7.现在它返回一个空值的MenuItem不是7.
我怎样才能完成它只会从MenuItem 7加载文章?
MenuItem与文章
有HABTM关系代码:
$d=$this->Article->find('all' , array('contain' => array(
'MenuItem' => array(
'conditions' => array(
'MenuItem.id ' => 7,
),
'fields'=>'id'
),
'Tag'=>array(
'conditions'=>array(
'Tag.name'=>'tag1'
),
'fields'=>'name'
)
),
'conditions'=>array('Article.content_type' => 'blog'),
'fields'=>array('id','content_type'),
'recursive'=>1
));
debug($d);
数组:
array(
(int) 10 => array(
'Article' => array(
'id' => '15',
'content_type' => 'blog'
),
'Tag' => array(),
'MenuItem' => array()
),
(int) 11 => array(
'Article' => array(
'id' => '16',
'content_type' => 'blog'
),
'Tag' => array(),
'MenuItem' => array(
(int) 0 => array(
'id' => '7',
'MenuItemsArticle' => array(
'id' => '18',
'title' => '',
'article_id' => '16',
'menu_item_id' => '7'
)
)
)
)
)
答案 0 :(得分:2)
我认为此类查找条件的最佳选择是修改模型以使用hasMany through (The Join Model)。这是我测试的一个例子,可以满足您的需求:
<强> Article.php 强>
class Article extends AppModel {
public $hasMany = array('ArticleMenuItem');
}
<强> MenuItem.php 强>
class MenuItem extends AppModel {
public $hasMany = array('ArticleMenuItem');
}
<强> ArticleMenuItem.php 强>
class ArticleMenuItem extends AppModel {
public $useTable = 'articles_menu_items';
public $belongsTo = array(
'Article',
'MenuItem'
);
}
查找电话
$articles = $this->ArticleMenuItem->find('all', array(
'conditions' => array(
'menu_item_id' => 7,
'Article.content_type' => 'blog'
),
'contain' => array(
'Article' => array(
'fields' => array(
'id',
'title'
)
),
'Tag'
)
));
这是它产生的东西:
array(
(int) 0 => array(
'ArticleMenuItem' => array(
'article_id' => '1',
'menu_item_id' => '7'
),
'Article' => array(
'id' => '1',
'content_type' => 'blog',
'title' => 'test blog'
)
),
(int) 1 => array(
'ArticleMenuItem' => array(
'article_id' => '4',
'menu_item_id' => '7'
),
'Article' => array(
'id' => '4',
'content_type' => 'blog',
'title' => 'another'
)
)
)
这是它生成的查询:
SELECT `ArticleMenuItem`.`article_id`, `ArticleMenuItem`.`menu_item_id`, `Article`.`id`, `Article`.`content_type`, `Article`.`title` FROM `caketest`.`articles_menu_items` AS `ArticleMenuItem` LEFT JOIN `caketest`.`articles` AS `Article` ON (`ArticleMenuItem`.`article_id` = `Article`.`id`) WHERE `menu_item_id` = 7 AND `Article`.`content_type` = 'blog'
我也在我的AppModel中设置了$recursive = -1
。我建议你做同样的事情,因为你使用可包含的行为,它更有效,因为它只会回收你需要的数据。 :)
希望这有帮助,任何问题只是让我知道。