我有一个模型排名,其中包含contact_id和belongsTo Model Contact。 Model Contact有一个costumer_id和belongsTo Model Costumer。 并且有很多排名。
还有一个模型产品,有很多排名。
在统计页面上,我选择
$this->Product->recursive = 1;
$this->set('products', $this->Paginator->paginate())
我得到了
的数组array(
'Product' => array(
'id' => '69',
),
'Ranking' => array(
(int) 0 => array(
'id' => '29',
'contact_id' => '9',
'product_id' => '69',
'ranking' => '9',
),
我想现在将Contact和Costumer绑定到基于contact_id的排名。 这可以通过bindModel手动完成吗? 如果是,我该怎么做?
我尝试设置$ this-> Product-> recursive = 1;到2和3,但选择了许多其他东西,我需要用unbindModel来清除...所以我希望有一种更聪明的方法来绑定那些模型来获取数据......?
答案 0 :(得分:0)
您基本上想要使用的是containable behavior。通过此行为,您可以筛选和限制模型查找操作。您可以在模型级别或控制器上添加此行为,以避免在应用程序已经增长到复杂级别时产生副作用。
来自Cake-Book的示例:
// Activate Containable Behavior on the fly in a controller
$this->User->Behaviors->load('Containable');
$this->User->contain();
$this->User->find('all', array(
'contain' => array(
'Profile',
'Account' => array(
'AccountSummary'
),
'Post' => array(
'PostAttachment' => array(
'fields' => array('id', 'name'),
'PostAttachmentHistory' => array(
'HistoryNotes' => array(
'fields' => array('id', 'note')
)
)
),
'Tag' => array(
'conditions' => array('Tag.name LIKE' => '%happy%')
)
)
)
));
希望这能让你朝着正确的方向前进。
答案 1 :(得分:0)
使用find它会得到我正确的数据:
$this->set('products', $this->Product->find('all', array(
'contain' => array(
'Ranking' => array(
'Contact' => array(
'foreignKey' => 'contact_id',
'Customer' => array(
'foreignKey' => 'customer_id',
)
)
)
)
)));
使用Paginator时,它看起来像
$this->Paginator->settings['contain'] = array(
'Ranking' => array(
'Contact' => array(
'foreignKey' => 'contact_id',
'Customer' => array(
'foreignKey' => 'customer_id',
)
)
)
);
$this->Product->Behaviors->load('Containable');
$this->set('products', $this->Paginator->paginate());
非常感谢!!