0

CakePHP:2.4.3

我尝试按照以下问题的答案中的说明进行操作,但它仅在子模型中应用该条件。(使用 hasMany 模型查找条件

例如,我希望能够仅获取 ProductsCategory.category_id 为 2 的产品。现在它只过滤关联的模型并仍然返回我的所有产品。

编辑:第一次没有提到它,但我希望能够有多个条件。ProductsCategory.category_id == 2 AND ProductsTag.tag_id == 1。

我有这些模型:产品、类别和标签

产品有很多产品类别和产品标签

ProductsCategory 和 ProductsTag 如下:

产品分类

product_id (fk) | category_id (fk)

产品标签

product_id (fk) | tag_id (fk)

Model/Product.php(编辑以包含来自 Rikesh 的建议)

class Product extends AppModel {
public $primaryKey = 'product_id';

public $actsAs = array('Containable');

public $belongsTo = 'Supplier';
public $hasMany = array(
    'ProductsCategory' => array(
        'className' => 'ProductsCategory',
        'foreignKey' => 'category_id',
        'dependent' => true),
    'ProductsTag' => array(
        'className' => 'ProductsTag',
        'foreignKey' => 'tag_id',
        'dependant' => true
    ));

到目前为止,这是我尝试过的:

$this->Product->find('all',
            array(
                'recursive' => -1,
                'contain' => array(
                    'ProductsCategory' => array(
                        'conditions' => array(
                            'ProductsCategory.category_id' => 2)
                        )
                    )
                )
            )

$this->Product->find('all',
            array(
                'joins' => array(
                    array(
                        'table' => 'products_categories',
                        'alias' => 'ProductsCategory',
                        'type' => 'inner',
                        'conditions' => array('ProductsCategory.category_id' => 2)
                    )
                )
            )
        )
4

2 回答 2

0

因为 ProductsCategory 属于产品,所以你可以找到 productsCategories 并让 cake 与产品一起加入它们

$this->Product->ProductsCategory->find(
    'all',
    array(
        'conditions' => array(
            'ProductsCategory.category_id' => 2,
            'ProductsTag.tag_id' => 1
    ),
        'contain' => array('Product', 'Product.ProductTag'),
        'group' => 'ProductsCategory.product_id'
    )
)
于 2013-12-31T09:28:03.057 回答
0

我设法通过在我的加入条件中添加 ProductsCategory.product_id = Product.product_id 来做我想做的事情:

$this->Product->find('all', array(
                'joins' => array(
                    array(
                        'table' => 'products_categories',
                        'alias' => 'ProductsCategory',
                        'type' => 'inner',
                        'conditions' => array(
                            'ProductsCategory.product_id = Product.product_id',
                            'ProductsCategory.category_id' => array(2, 3), 
                        )
                    ),
                    array(
                        'table' => 'products_tags',
                        'alias' => 'ProductsTag',
                        'type' => 'inner',
                        'conditions' => array(
                            'ProductsTag.product_id = Product.product_id',
                            'ProductsTag.tag_id' => 1
                        )
                    )
                )
            )
        )
于 2013-12-31T17:01:20.580 回答