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

时间:2015-02-18 14:07:46

标签: php mysql cakephp

我正在使用cakephp处理模型。我有两个型号,邮政模型;其中包含与标签模型的$ hasMany关系。我希望标签名称值是唯一的。这是为了消除任何数据冗余。我想通过AJAX搜索框搜索标签。我需要能够动态地自动创建标签,但前提是它们尚未创建。我如何使用CakePHP 2.6.1实现这一目标?

实施例: 我创建了两个表:

标记:

id    name    post_id

帖子:

id    title    url    content

1 个答案:

答案 0 :(得分:2)

为了确保任何代码的name值都是唯一的,只需在名称字段的Tag模型中添加validation rule即可。有一个特定的isUnique验证规则。在app/Model/Tag.php文件中,添加以下内容:

public $validate = array(
    'name' => array(
        'rule' => 'isUnique',
        'message' => 'This tag already exists.'
    )
);

这将导致具有重复标记名称的Tag模型上的任何保存操作失败,并显示您在模型中设置的错误消息。

要使其忽略任何重复项,请稍微更改保存的工作方式。将这样的内容添加到Controller逻辑中:

foreach ($this->request->data['Tags'] as $tagData) {
    $this->Tag->set($tagData);
    if ($this->Tag->validates()) {
        $this->Tag->create();
        $this->Tag->save($tagData);
    }
}