有没有办法在CakePHP中用条件定义模型关系?

时间:2011-01-05 12:00:48

标签: cakephp

我正在使用CakePHP 1.3。

我对CakePHP模型有几个问题:

1)有没有办法用条件定义模型,这样当使用Containable行为调用时,我不需要再为它定义'条件'。例如:我有两个模型 - “商店”和“交易”,其中“商店”有很多“交易”。我想完成以下操作,而不必每次都为“交易”定义这些条件:

$this->Store('all', array('contain'=>array('Deal'=>array('isactive'=>1,'now() < expirydate', 'qty > 0')));

2)另外,有没有办法根据条件不同地定义模型之间的关系?换句话说,我如何定义“商店”hasMany“Deals”,“ActiveDeal”,“ExpiredDeal”等等,都在'deals'表中,但根据我为每个条款设置的条件而不同。

非常感谢任何帮助。

感谢/问候..

1 个答案:

答案 0 :(得分:3)

如果您查看CakePHP Cookbook的Associations: Linking Models Together页面上的前几个代码示例,您将看到可以为模型联接添加条件,无论何时执行基本查找都可以使用。< / p>

因此,您应该能够执行以下操作:

class Store extends AppModel {
    var $name = 'Store';

    var $hasMany = array(
        'Deal' => array(
            'className' => 'Deal',
            'foreignKey' => 'store_id',
            'conditions' => array(
                'Deal.isactive' => '1',
                'now() < Deal.expirydate',
                'Deal.qty > 0'
            ),
            'order' => ''
        ),
        'ExpiredDeal' => array(
            'className' => 'Deal',
            'foreignKey' => 'store_id',
            'conditions' => array('now() >= ExpiredDeal.expirydate'),
            'order' => ''
        )
    );
}