问题:如何在CakePHP中对SaveAssociated和Save函数调用进行模型验证(特别是对于子模型)中的相同代码......给定SaveAssociated实现期望表单数据数组包含属于子模型的数据字段的数字索引[0]?CakePHP SaveAssociated和保存 - 使用相同的模型验证代码
场景:
假设我有一个的hasMany关系到几个子模型父模型。
通常,如果使用SaveAssociated将数据一次保存到所有模型,则需要在视图表单输入上指定索引编号(通常为0)。例如:
echo $this->Form->input('MerchantControl.0.startdate', array('type' => 'text', 'class' => 'datepicker_start'));
其结果是,任何自定义子模型的验证代码将需要与被写入[0]为好。请参阅下面的代码示例中的函数urlParamNotUsedByOtherMerchants。
public $validate = array(
'urlparam' => array(
'In Use by other Merchants' => array(
'rule' => 'urlParamNotUsedByOtherMerchants',
'message' => 'URLPARAM belongs to another Merchant'
)
)
);
public function urlParamNotUsedByOtherMerchants($data) {
$searchfilter = array(
//Because of SaveAssociated, need to refer to index [0]
'MerchantControl.id !=' => $this->data['MerchantControl'][0]['merchant_id'],
'MerchantControl.urlparam ' => $data,
);
$merchantcontrol = $this->find('all', array('conditions' => $searchfilter));
if (sizeof($merchantcontrol) > 0) {
return false;
} else {
return true;
}
}
的问题是有,我也将在maintainence意见在那里我直接更新或仅创建子模型使用“保存”而不是“SaveAssociated”其他许多实例。在这种情况下,该模型验证代码将会失败,并显示索引“[0]”未定义或类似的错误。
如何在CakePHP中对SaveAssociated和Save函数调用进行模型验证(特别是对于子模型)中的相同代码?
为什么'MerchantControl.id'永远是如果不等于'MerchantControl.merchant_id'的机会呢?你不应该与外键列进行比较吗?此外[**'验证'设置**](http://book.cakephp.org/2.0/en/models/saving-your-data.html#model-saveassociated-array-data-null-array-选项 - 阵列)你使用,“真”还是“第一”?并且是从插入中获得的'merchant_id'值,还是从视图传递的值? ps,请始终提及您的确切CakePHP版本! – ndm