2014-09-04 84 views
0

我有以下的结构,我需要在目标表中插入:CakePHP的关系保存

目标表:

target_id, client_crop_id, amount 

ClientCrop表:

client_crop_id, client_id, crop_id 

客户端表格:

client_id, client_name 

作物表:

crop_id, crop_name 

我的问题是:在插入一个新的目标的那一刻,我的观点有农作物的客户和ID,怎么会CakePHP的知道,该领域client_crop_id目标模型是上面引用的结合吗?我应该在Target的beforeSave()方法中调用一个方法来获取ClientCrop的id?

谢谢。

+1

显示u必须definesd – 2014-09-05 06:31:14

回答

0

您可以在视图中添加所需的字段:

<?php 

echo $this->Form->hidden('ClientCrop.cient_id', array('value' => $yourVar)); 
echo $this->Form->hidden('ClientCrop.crop_id', array('value' => $yourVar)); 

?> 

但我不推荐这种方法由于安全性。尝试直接在你的控制器动作后设置它:

<?php 

$this->request>data['ClientCrop']['client_id'] = $yourVar; 
$this->request>data['ClientCrop']['crop_id'] = $yourVar; 

?> 

然后你应该使用saveAssociated方法。

http://book.cakephp.org/2.0/en/models/saving-your-data.html#model-saveassociated-array-data-null-array-options-array

+1

虽然我完全赞成的安全提示的关系,这是值得注意的是,即使你在视图中作为隐藏值离开IDS,你应该有安全组件激活,以避免形式篡改。 – Nunser 2014-09-05 20:05:37

+0

好吧,我明白了,但是,它会通过client_id和crop_id将Target.client_crop_id设置为相应的ClientCrop? – 2014-09-05 23:35:21

+0

它会。 CakePHP将检测模型中的关系并保存相关数据。 – andtxr 2014-09-05 23:40:06