Есть ли способ определить отношения модели с условиями в CakePHP? - PullRequest
0 голосов
/ 05 января 2011

Я использую CakePHP 1.3.

У меня есть несколько вопросов относительно моделей CakePHP:

1) Есть ли способ определить модель с условиями, например, при вызове с использованием Containableповедение, мне не нужно снова определять «условия» для этого.Например: у меня есть две модели - «Магазин» и «Сделка», где «Магазин», который имеет много «Сделка».Я хочу выполнить следующее без необходимости каждый раз определять эти условия для «Сделки»:

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

2) Кроме того, есть ли способ определить отношения между Моделями по-разному в зависимости от условий?Другими словами, как я могу определить «Store» hasMany «Deals», «ActiveDeal», «ExpiredDeal» и т. Д., Все в таблице «сделок», но различающиеся в зависимости от условий, которые я установил для каждого.

Очень признателен за любую помощь.

Спасибо / С уважением ..

1 Ответ

3 голосов
/ 05 января 2011

Если вы посмотрите на первые пару примеров кода на странице Ассоциации: связывание моделей в CakePHP Cookbook, вы увидите, что вы можете добавлять условия к объединениям моделей, которые будут работать всякий раз, когда высделать базовый поиск.

Поэтому вы должны быть в состоянии сделать что-то вроде следующего:

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' => ''
        )
    );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...