我有三个表CakePHP的获取相关联的帖子从标签
- 帖子
- 标签
- posts_tags
我需要编写一个选择和一些控制器逻辑将所有职位,有标签work
这意味着查询tags
fin d id
查询标签,检查相关posts_tags
表查找匹配,使用post_id
从帖子表中返回正确的帖子。
我不知道如何开始这个查询,我是CakePHP的新手,可以用一只手......请吗?
如果有帮助,这是我的帖子模型关系:
var $hasAndBelongsToMany = array(
'Tag' => array(
'className' => 'Tag',
'joinTable' => 'posts_tags',
'foreignKey' => 'posts_id',
'associationForeignKey' => 'tag_id',
'unique' => true,
'conditions' => '',
'fields' => '',
'order' => '',
'limit' => '',
'offset' => '',
'finderQuery' => '',
'deleteQuery' => '',
'insertQuery' => ''
)
);
我的标签表由两个字段:id
和tag
我PostsTag表由三个字段组成:id
,tag_id
和post_id
我的帖子表是由四个方面组成:id
,title
,body
和created
我发现在CakePHP的书一些代码,显示下面的代码:
$this->Recipe->Tag->find('all', array('conditions'=>array('Tag.name'=>'Dessert')));
他们认为,这是一个类似的想法,所以我试图适应:
$this->Post->Tag->find('all', array('conditions'=>array('Tag.tag'=>'work')));
然而,这并没有工作。这将返回所有帖子而不进行过滤
我把@Leo的建议,并试图给他的代码适应矿山:
function getArticleByTagSql($tag) {
$dbo = $this->getDataSource();
$subQuery = $dbo->buildStatement(
array(
'fields' => array('DISTINCT(ArticlesTag.article_id)'),
'table' => "articles_tags",
'joins' => array(
array('table' => 'tags',
'alias' => 'Tag',
'type' => 'INNER',
'conditions' => array('ArticlesTag.tag_id = Tag.id')
)
),
'alias' => "ArticlesTag",
'conditions' => array("Tag.tag" => $tag),
'order' => null,
'group' => "ArticlesTag.article_id",
'limit' => null
),
$this
);
$subQuery = ' Article.id IN (' . $subQuery . ')';
return $dbo->expression($subQuery);
}
控制器:
$this->set('articles', $this->paginate(array(
'conditions' => $this->Article->getArticleByTagSql('work')
)));
但是,无论我在PAGINATE()方法的一个关键键入 - 在这种情况下,“条件”出现在查询中,我无法弄清楚为什么 - 我不断收到未知列'条件'错误。错误与paginate函数有关,没有它,数据将正确返回,但是如果没有它,我不能使用paginator。这就像一个catch 22
干杯,
丹
你可以发布你的标签表中的字段名称是什么? – Headshota
@Headshota - 我已经更新了我的问题以包含它们。 –
丹尼尔您正在使用paginate,您不要在paginate调用中声明'条件'。 Set $ this-> paginate ['conditions'] = $ this-> Article-> getArticleByTagSql('work'); 然后调用$ this-> paginate('Article'); – Leo