CakePHP:删除数据库表中的冗余
我正在使用cakephp开发模型。我有两个模型,后模型;它包含$hasMany与标记模型的关系。我希望标记名称值是唯一的。这是为了消除任何数据冗余。我想通过一个类似AJAX的标签搜索框进行搜索。我需要能够动态自动创建标记,但前提是它们尚未创建。如何使用CakePHP 2.6.1实现这一点 例如: 我创建了两个表: 标签: 职位:CakePHP:删除数据库表中的冗余,php,mysql,cakephp,Php,Mysql,Cakephp,我正在使用cakephp开发模型。我有两个模型,后模型;它包含$hasMany与标记模型的关系。我希望标记名称值是唯一的。这是为了消除任何数据冗余。我想通过一个类似AJAX的标签搜索框进行搜索。我需要能够动态自动创建标记,但前提是它们尚未创建。如何使用CakePHP 2.6.1实现这一点 例如: 我创建了两个表: 标签: 职位: id title url content 为了确保任何标记的名称值都是唯一的,只需在名称字段的标记模型中添加一个。有一个特定的验证规则。在app/M
id title url content
为了确保任何标记的
名称
值都是唯一的,只需在名称字段的标记
模型中添加一个。有一个特定的验证规则。在app/Model/Tag.php文件中,添加以下内容:
public $validate = array(
'name' => array(
'rule' => 'isUnique',
'message' => 'This tag already exists.'
)
);
这将导致对具有重复标记名的标记模型的任何保存操作失败,并显示您在模型中设置的错误消息
要使其忽略任何重复项,请稍微更改保存的工作方式。在控制器逻辑中添加如下内容:
foreach ($this->request->data['Tags'] as $tagData) {
$this->Tag->set($tagData);
if ($this->Tag->validates()) {
$this->Tag->create();
$this->Tag->save($tagData);
}
}
您使用的是什么CakePHP版本?我使用的是CakePHP版本2.6.1有没有办法让它忽略唯一字段?ie当我运行$this->model saveall(…)时,它仍然会使用唯一的值,但它只会创建新的标记?“您可以通过提供多个字段来验证一组字段是否唯一,并将$or设置为false”this do that?@DanielSamson工作原理略有不同,但可以完成。请参阅我的最新答案。您可以分别检查每个标记的验证规则,并选择仅在通过时尝试save()
,否则不执行任何操作。谢谢您的帮助。
foreach ($this->request->data['Tags'] as $tagData) {
$this->Tag->set($tagData);
if ($this->Tag->validates()) {
$this->Tag->create();
$this->Tag->save($tagData);
}
}