首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实现Phalcon 4数据库存在验证器(类似于唯一性)

实现Phalcon 4数据库存在验证器(类似于唯一性)
EN

Stack Overflow用户
提问于 2020-12-25 05:38:11
回答 1查看 59关注 0票数 0

我经常需要验证表(模型)的某些列(属性)中是否存在给定值。

这在模型的外键中很有用,可以用来检查给定值是否存在。

最有可能的是,验证逻辑可以与唯一性基本相同,除了这里的比较可以类似于> 0。

一种可能的使用场景可能如下:

代码语言:javascript
复制
$validator->add(
    'organization_id',
    new ExistenceOnDbValidator(
        [
            'model' => Organization::class,
            'expr'=> ' id = %s ',
            'excludeNullValue'=> true,
            'message' => 'Organization does not exist.',
        ]
    )
);
EN

回答 1

Stack Overflow用户

发布于 2020-12-29 07:32:19

最后,我实现了一个名为ExistenceOnDbValidator的验证器,它工作得很好。

用法

代码语言:javascript
复制
$validator = new Validation();

$validator->add(
    'organization_id',
    new ExistenceOnDbValidator(
        [
            'model' => Organization::class,
            'expr' => ' id = %s ',
            'ignoreNullValue' => false,
            'message' => 'Selected organization does not exist.',
        ]
    )
);

实现

代码语言:javascript
复制
use Phalcon\Messages\Message;
use Phalcon\Validation;
use Phalcon\Validation\AbstractValidator;
use Phalcon\Validation\ValidatorInterface;

class ExistenceOnDb extends AbstractValidator implements ValidatorInterface
{

    public function validate(Validation $validator, $attribute): bool
    {
        $expr = $this->getOption('expr');
        $model = $this->getOption('model');
        $value = $validator->getValue($attribute);
        $ignoreNullValue = true;

        if ($this->hasOption('ignoreNullValue')) {
            $ignoreNullValue = $this->getOption('ignoreNullValue');
        }

        if ((is_null($value) || empty($value)) && $ignoreNullValue == true) {
            return true;
        }

        $expr = sprintf(
            $expr,
            $value,
        );

        $result = $model::findFirst($expr);

        if ((is_null($result) || empty($result))) {

            $message = $this->getOption('message');

            $validator->appendMessage(new Message($message));

            return false;
        }

        return true;
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65443424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档