这是我的可控条件
$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 1)等待2)注意3)块4)完成我想要查找由buyer_status_id或seller_status_id过滤的交易
我不知道如何创造新的行为 - 有一篇关于它的小文章 Using Contain
答案 0 :(得分:1)
链接到表关系的另一种方法是使用bindModel强制Join。
下面是一个绑定4个表项的代码 - > Categories-> Sections-> division。你可以找到关系范围内的任何东西。
$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