Cakephp使用hasAndBelongsToMany在相关表上查找条件

时间:2014-04-30 22:02:42

标签: cakephp cakephp-2.0

我有以下代码,从我在相关模型(HABTM)上执行查找条件时发出错误:

class Users extends Model{
    public $useTable = 'users';

    public $hasAndBelongsToMany = array(
        'UserCategories' => array(
            'className' => 'UserCategories',
            'joinTable' => 'user_categories_link',
            'foreignKey' => 'user_id',
            'associationForeignKey' => 'category_id',
            'unique' => false,
        )
    );
    public function getData($page = 0, $category = '', $subcategory = ''){
    return $this->find('all', array(
        'limit'     => 6,
        'page'      => $page,
        'conditions'=> array(
            'active'=> 1,
            'UserCategories.category_name' => $category, // THIS GIVES ERROR
            'UserCategories.category_subcategory' => $subcategory, // THIS GIVES ERROR

        )
    ));
}

在我的控制器中:

$this->Users->getData(0, 'somemaincategory', 'somesubcategory');

我似乎无法对相关的HABTM模型(在这种情况下为UserCategories)做条件。我也尝试使用'contains'(使用$ actsAs),但是即使没有与之链接的类别,他仍然会向我提供所有用户数据。在这种情况下,Category数组只是空白。

希望有人可以帮助我。 提前谢谢,

亚伦

1 个答案:

答案 0 :(得分:2)

进行手动加入。您可以使用它来进行实际的内连接(包含将充当左连接)。 http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html#joining-tables

$this->find('all', 
     array(
         'conditions' => array(
              'active' => 1,
          ), 
         'joins' => array(
               array(
                   'table' => 'user_categories_link',
                   'alias' => 'UserCategoriesLink',
                   'type' => 'inner',
                   'conditions' => array(
                        'UserCategoriesLink.user_id = User.id'
                   ),
              ),
              array(
                   'table' => 'user_categories',
                   'alias' => 'UserCategories',
                   'type' => 'inner',
                   'conditions' => array(
                        'UserCategories.id = UserCategoriesLink.category_id',
                        'UserCategories.category_name' => $category,
                        'UserCategories.category_subcategory' => $subcategory,
                   ),
              )
         ),
     )
);