如何在不使用Cakephp 3覆盖现有记录的情况下保存记录集

时间:2018-01-20 17:49:12

标签: database cakephp save overwrite

是否有一种简单的方法来保存记录集,我的意思是多条记录,但只有“新记录”?

我在视图中有一个表用户和一个用户表单。您必须输入的第一个字段是护照号码,因此如果用户已经存在于数据库中,则表单的其余部分将自动完成并禁用以防止更改,但如果护照不存在则您必须输入所有数据。由于任何人都可以从浏览器更改现有用户数据控件,即使它们已被禁用,我想确保只有新记录保存在数据库中。首先,我想我可以在数据库中再次找到并在保存之前从记录集中删除现有用户,但我不知道是否有更优雅的方法。

提前Ty。

我在这里写这个,因为评论太短了:

感谢您的回答,André。我很抱歉,如果我没有完美解释,但表格是通过禁用除护照以外的所有控件来完成的,如果护照不存在(我在护照重点检查时),则其余控件设置为启用。我的意思是,已经完成了。问题只是关于储蓄。

您谈到的验证方法,我实际上正在验证表单中的所有控件,我必须禁用“唯一”规则,以便用户可以将现有用户链接到当前帐单,否则将无法验证提交并且不允许用户继续(我这样做是因为它在测试时发生在我身上)。实际设置要复杂得多:表单属于与其他4个模型相关联的模型(账单),其中2个关系是多对多,bill_users和bills_clients,其中用户是执行工作的人员和客户支付的为此,但我试图让问题更容易。无论如何,我所寻找的实际上是某种我无法找到的储蓄设置。在文档中我发现“转换belongsToMany数据时,可以使用onlyIds选项禁用新实体创建。启用时,此选项限制belongsToMany编组仅使用_ids键并忽略所有其他数据。”句子的前半部分是有希望的,但解释说不同,我实际上尝试了它没有成功。

1 个答案:

答案 0 :(得分:0)

第一: 是否有一种简单的方法来保存记录集,我的意思是多个记录,但只有"新记录#34;?

是的,您可以在模型中验证它,如下所示:

public function buildRules(RulesChecker $rules)
{
    $rules->add($rules->isUnique('passportNumber'));
    return $rules;
}

这样可以防止保存重复的护照号码寄存器,但您可以不同。

我在视图中有一个表用户和一个用户表单。您必须输入的第一个字段是护照号码,因此如果用户已经存在于数据库中,则表单的其余部分将自动完成并禁用以防止更改,但如果护照不存在则您必须输入所有数据。 有两种不同的方法:

首先你有你的表格,当你填写第一个字段(护照号码)时你开发一个ajax函数这个ajax函数向你的控制器发出请求,如果找到一些东西获取数据并填写其他字段,就会搜索一个带有该号码的护照并将它们变成可读的,否则就是一无所有,让用户自己填写字段

第二步添加一步一步你首先做一个表单尝试通过传递号码查找,用户只用一个号码填写这个字段然后提交,提交此搜索记录,如果找到填写整个下一步字段,否则下一步将是要填写的字段的其余部分。

这也可能对您有所帮助:https://book.cakephp.org/3.0/en/orm/validation.html

告诉我你的决定:)

相关问题