在CakePHP HABTM关系中搜索结果,其中包括所有'条款匹配,而不是'任何'

时间:2014-04-12 20:50:41

标签: php cakephp join has-and-belongs-to-many

在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;

1 个答案:

答案 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'
                            )
                        )
);