Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CakePHP:如何使用hasMany关联中的条件过滤父模型中的结果_Php_Cakephp_Model_Cakephp 2.4 - Fatal编程技术网

CakePHP:如何使用hasMany关联中的条件过滤父模型中的结果

CakePHP:如何使用hasMany关联中的条件过滤父模型中的结果,php,cakephp,model,cakephp-2.4,Php,Cakephp,Model,Cakephp 2.4,CakePHP:2.4.3 我试图按照以下问题答案中的说明进行操作,但它仅适用于子模型中的条件。() 例如,我希望能够获取ProductsCategory.category\u id为2的产品。现在它只过滤关联的模型,仍然返回我所有的产品 编辑: 第一次没有提到,但我希望能够有多种条件。ProductsCategory.category_id==2和ProductsTag.tag_id==1。 我有这些模型: 产品、类别和标签 产品有许多产品类别和产品阶段 ProductsAgegory和Pro

CakePHP:2.4.3

我试图按照以下问题答案中的说明进行操作,但它仅适用于子模型中的条件。()

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

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

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

产品有许多产品类别和产品阶段

ProductsAgegory和ProductsTag如下所示:

产品分类

product_id (fk) | category_id (fk)
ProductsTag

product_id (fk) | tag_id (fk)
Model/Product.php(编辑以包含Rikesh的建议)

以下是我到目前为止所尝试的:

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


因为ProductsCategory属于产品,所以您可以找到ProductsCategory并让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'
    )
)

我通过在我的连接条件中添加ProductsCategory.product\u id=product.product\u 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
                        )
                    )
                )
            )
        )

谢谢,它起作用了:)我意识到我没有要求这个,但是有可能在多个关联中搜索条件吗?例如ProductsCategory.category_id==2和ProductsTag.tag_id==1?我得到以下信息:SQLSTATE[42S22]:未找到列:1054“where子句”中的未知列“ProductsTag.tag_id”。查看查询,我可以看到它确实不在SELECT子句中。注意:我修复了“包含”行中产品中缺少的s。
$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'
    )
)
$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
                        )
                    )
                )
            )
        )