CakePHP:2.4.3
我尝试按照以下问题的答案中的说明进行操作,但它仅在子模型中应用条件。 (Find conditions with hasMany model)
我希望能够仅提取具有ProductsCategory.category_id的产品,例如,2。现在它只过滤相关模型并仍然返回我的所有产品。
修改: 没有第一次提到它,但我希望能够有多种条件。 ProductsCategory.category_id == 2 AND ProductsTag.tag_id == 1.
我有这些模特: 产品,类别和标签
产品hasMany ProductsCategory和ProductsTag
ProductsCategory和ProductsTag如下:
ProductsCategory
product_id (fk) | category_id (fk)
ProductsTag
product_id (fk) | tag_id (fk)
型号/ 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)
)
)
)
)
答案 0 :(得分:0)
因为ProductsCategory属于产品,你可以找到产品类别,让蛋糕加入产品
$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'
)
)
答案 1 :(得分: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
)
)
)
)
)