Cakephp SaveAssociated 和 Save - 使用相同的模型验证代码
Posted
技术标签:
【中文标题】Cakephp SaveAssociated 和 Save - 使用相同的模型验证代码【英文标题】:Cakephp SaveAssociated and Save - Using same Model Validation code 【发布时间】:2014-04-27 12:46:47 【问题描述】:问题:如何在模型验证(尤其是子模型)中对 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;
问题是在许多其他情况下,我还将在维护视图中使用“Save”而不是“SaveAssociated”,在这些情况下,我只直接更新或创建子模型。在这种情况下,此模型验证代码将失败,并显示索引“[0]”未定义或类似错误。
如何在模型验证(尤其是子模型)中对 Cakephp 中的 SaveAssociated 和 Save 函数调用使用相同的代码?
【问题讨论】:
如果不是偶然,为什么MerchantControl.id
会等于MerchantControl.merchant_id
?您不应该与外键列进行比较吗?还有你在用什么validate
setting,true
或first
? merchant_id
值是从插入获得的,还是从视图传递的值? ps,请务必提及您的确切 CakePHP 版本!
【参考方案1】:
如果我理解正确,您想检查 urlparam 是否已被其他商家使用,或者换句话说,它是否是唯一的。
为什么不使用内置的验证规则isUnique
?
例子:
public $validate = array(
'urlparam' => array(
'In Use by other Merchants' => array(
'rule' => 'isUnique',
'message' => 'URLPARAM belongs to another Merchant'
)
)
);
【讨论】:
我不能使用 isUnique。单个商家可以多次使用相同的 URLPARAM,这可能作为子模型中的多个记录存在。因此我相信 isUnique 在我的情况下不起作用。我的主要问题仍然是关于为 SaveAssociated 和 Save 使用相同的模型验证代码以上是关于Cakephp SaveAssociated 和 Save - 使用相同的模型验证代码的主要内容,如果未能解决你的问题,请参考以下文章
cakephp 模型 saveAssociated 错误 - 不能将字符串偏移量用作数组
Cakephp:使用`saveAssociated()`时如何将`parent_id`保存到基于树的模型中?
CakePHP如何在一个saveAll中不知道外键的情况下创建hasMany数据?