Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CakePHP:删除数据库表中的冗余_Php_Mysql_Cakephp - Fatal编程技术网

CakePHP:删除数据库表中的冗余

CakePHP:删除数据库表中的冗余,php,mysql,cakephp,Php,Mysql,Cakephp,我正在使用cakephp开发模型。我有两个模型,后模型;它包含$hasMany与标记模型的关系。我希望标记名称值是唯一的。这是为了消除任何数据冗余。我想通过一个类似AJAX的标签搜索框进行搜索。我需要能够动态自动创建标记,但前提是它们尚未创建。如何使用CakePHP 2.6.1实现这一点 例如: 我创建了两个表: 标签: 职位: id title url content 为了确保任何标记的名称值都是唯一的,只需在名称字段的标记模型中添加一个。有一个特定的验证规则。在app/M

我正在使用cakephp开发模型。我有两个模型,后模型;它包含$hasMany与标记模型的关系。我希望标记名称值是唯一的。这是为了消除任何数据冗余。我想通过一个类似AJAX的标签搜索框进行搜索。我需要能够动态自动创建标记,但前提是它们尚未创建。如何使用CakePHP 2.6.1实现这一点

例如: 我创建了两个表:

标签:

职位:

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);
    }
}