在CakePHP 2.4中,我正在尝试为搜索查询生成条件,以搜索已在HABTM关系中标记的数据。
我的问题有两个:我无法让我的查询仅返回标记有我所有搜索字词的数据,而且我无法通过查询返回部分代码的结果。
此循环生成一个工作查询,返回包含搜索查询中任意标记的数据。
foreach($tags as $tag) {
$conditions['Tag.name'][] = $tag;
}
$query = $this->Tagged->getQuery('all', array(
'conditions' => $conditions,
'fields' => array('foreign_key'),
'contain' => array('Tag')
));
我想让循环生成条件,只返回标记有所有搜索词的数据,而不是用任何标记的数据,并返回部分词的匹配。
编辑2:
我的数据库架构看起来像这样(我正在使用CakeDC Tags插件添加标签)
帖子
id | other_data
public $hasAndBelongsToMany = array(
'Tag' => array(
'with' => 'Tagged'));
标记
id | model | foreign_key | tag_id
标签
id | name
这是我正在尝试使用的联接:当我使用Tag
作为别名时,它会抱怨:Not unique table/alias: 'Tag'
。
$joins = array(
array(
'table' => 'tags',
'alias' => 'queryTag',
'type' => 'LEFT',
'conditions' => array(
'queryTag.name' => 'keyword'
)
),
);
$query = $this->Tagged->getQuery('all', array(
//'conditions' => array('Tag.name LIKE' => '%' . $data['tags'] . '%'),
'joins' => $joins,
'fields' => array('foreign_key'),
'contain' => array('Tag')
));
return $query;
答案 0 :(得分:2)
没有完整的数据库架构很难说,但我认为你需要加入两个表,如 -
$options['joins'] = array(
array(
'table' => 'tagged_tags',
'alias' => 'TaggedTag',
'type' => 'LEFT',
'conditions' => array(
'TaggedTag.tagged_id' => 'Tagged.id'
)
),
array(
'table' => 'tags',
'alias' => 'Tag',
'type' => 'LEFT',
'conditions' => array(
'TaggedTag.tag_id' => 'Tag.id'
)
)
);