问题:如何在CakePHP中的SaveAssociated和Save函数调用中使用模型验证中的相同代码(特别是对于子模型),...鉴于SaveAssociated实现期望表单数据数组包含属于子模型的数据字段的数字索引[0]?
情景:
假设我有一个与多个子模型具有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;
}
}
问题是还有很多其他情况,我也会在维护视图中使用“保存”而不是“SaveAssociated”,我只会直接更新或创建子模型。在这种情况下,此模型验证代码将失败,并显示错误,指出索引“[0]”未定义或类似。
如何在CakePHP中对SaveAssociated和Save函数调用进行模型验证(特别是对于子模型)中使用相同的代码?
答案 0 :(得分:0)
如果我理解正确,您想检查其他商家是否已经使用了urlparam,或者换句话说是否是唯一的。
为什么不使用内置验证规则isUnique
?
示例:
public $validate = array(
'urlparam' => array(
'In Use by other Merchants' => array(
'rule' => 'isUnique',
'message' => 'URLPARAM belongs to another Merchant'
)
)
);