0

ここに画像の説明を入力

ここに私の封じ込め可能な条件があります

$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: それは find メソッドを減少させます - どのように私は再帰を削除する必要があると思います
2) User_Status テーブルに 4 つの user_statuses を持っています4)buyer_status_idまたはseller_status_idでフィルタリングされたトランザクションを検索することを完了します

新しい動作を作成する方法はわかりません - それについての小さな記事があります Using Contain

4

1 に答える 1

1

テーブル リレーションシップにリンクするもう 1 つの方法は、bindModel を使用して Join を強制することです。

以下は、Items->Categories->Sections->divisions の 4 つのテーブルをバインドするコードです。関係の範囲内で何でも見つけることができます。

$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

于 2013-08-28T08:31:48.517 に答える