2012-03-25 54 views
0

我有以下型号:属性和特性CakePHP - 使用HABTM的多个过滤器

他们有一个HABTM关系。

我想建立一个查询,可以采取characteristic_ids任意数量和搜索具有特征X与特征Y和特点ž等

此刻,我只能管理一个IN特性(),它是上面使用OR的等价物。

即使是原始SQL如何执行此操作的指针也会很有用,因为我可以将它转换为CakePHP查找。

回答

0

您可能希望创建属性模型内部下面的方法:

function getProperties($characteristicsIDs) { 
    $ids = $this->characteristicsProperty->find('list', array(
     'fields' => array('property_id', 'property_id'), 
     'conditions' => array('characteristic_id' => $characteristicsIDs), 
     'group' => 'property_id having count(*) = '.count($characteristicsIDs), 
    )); 

    $ids = array_keys($ids); 

    return $ids; 
} 
你控制器内部

然后:

$ids = $this->Property->getProperties($propertiesIDs); 
$this->Property->find('all', array(
    'conditions' => array(
    'Property.id' => $ids 
    ) 
)); 
+0

对我的作品。谢谢。 – timstermatic 2012-03-30 10:53:34

+0

@wiseguysonly然后你可以验证答案。 – 2012-03-31 00:33:12

+0

好的。欢呼的微调! – timstermatic 2012-05-23 10:22:39