как установить сдерживаемое поведение + cakephp2.x

введите описание изображения здесь

вот мое сдерживаемое состояние

$userStatusCondition = array('AND' => array(
                                                     'OR'=> array(
                                                                    'TransactionStatus.buyer_status_id'=>$user_status_id,
                                                                    'TransactionStatus.seller_status_id'=>$user_status_id,
                                                                )
                                                            )
                                                );

Условия слияния (другие условия + условие user_status)

$transactions = $this->Transaction->find('all',array(
                                                            'conditions'=> Set::merge($otherConditions, $userStatusCondition),
                                                            'recursive'=>2));

в TransactionModel я установил

public $actsAs = array('Containable');

public $belongsTo = array(
             'UserStatus' => array(
        'className' => 'UserStatus',
        'foreignKey' => 'buyer_status_id',
        'conditions' => '',
        'fields' => '',
        'order' => ''
    ),
            'UserStatus' => array(
        'className' => 'UserStatus',
        'foreignKey' => 'seller_status_id',
        'conditions' => '',
        'fields' => '',
        'order' => ''
    ),
   );

проблемы

1) Мне не нравится использовать рекурсивный 2: он уменьшает метод поиска - как бы я ни думал после правильного размещения, я думаю, что мне нужно удалить рекурсивный
2) У меня есть четыре user_status в таблице User_Status 1) ожидание 2) внимание 3) блок 4) Завершите, который я хочу найти транзакции, отфильтрованные по Buy_status_id или seller_status_id

Я не знаю, как создать новое поведение - об этом есть небольшая статья Использование "Контейнера" ​​


person Fury    schedule 28.08.2013    source источник
comment
Чего ты хочешь достичь?   -  person Ikong    schedule 28.08.2013
comment
У меня есть четыре user_status в таблице User_Status 1) ожидание 2) внимание 3) блок 4) Завершите, который я хочу найти транзакции, отфильтрованные по Buy_status_id или seller_status_id   -  person Fury    schedule 28.08.2013
comment
Вместо использования сдерживаемого я ответил альтернативным способом. Надеюсь, это даст вам представление.   -  person Ikong    schedule 28.08.2013


Ответы (1)


Другой способ связи с таблицей - использование bindModel для принудительного соединения.

Ниже приведен код, связывающий 4 таблицы Items-> Categories-> Sections-> divisions. Вы можете найти что угодно в рамках отношений.

$this->unbindModel(array(
    'belongsTo' => array('Category')
));

$this->bindModel(array(
    'hasOne' => array(
        'Category' => array(
            'foreignKey' => false,
            'conditions' => array('Category.id = Item.category_id')
        ),
        'Section' => array(
            'foreignKey' => false,
            'conditions' => array('Section.id = Category.section_id')
        )
        'Division' => array(
            'foreignKey' => false,
            'conditions' => array('Division.id = Section.division_id')
        )
    )
));
$result = $this->find('first', array(
    'conditions' => array('Item.id' => $id),
    'contain' => array('Category', 'Section', 'Division'),
    'fields' => array('Division.id')
));

Делая это, вы можете свободно запрашивать что угодно в диапазоне таблиц.

Дополнительная информация здесь: http://mark-story.com/posts/view/using-bindmodel-to-get-to-deep-relations

person Ikong    schedule 28.08.2013
comment
Спасибо, тело. Я прочитал эту статью, но не смог ее реализовать, потому что она недостаточно глубокая. Сейчас я попробую еще раз. Сообщаю вам - нужно ли мне по-прежнему использовать public $ actionsAs = array ('Containable'); в TransactionModel - person Fury; 28.08.2013
comment
Я сам успешно реализовал это, уверен, вы тоже сможете. Ваше здоровье - person Ikong; 28.08.2013
comment
Необязательно указывать $ actionsAs = array ('Containable') ;. Убедитесь, что вы проверили правильные условия в модели привязки. - person Ikong; 28.08.2013
comment
Я использовал его в TransactionController, но он не работает :( - person Fury; 28.08.2013