首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Yii2:如何在我的模型中添加一个检查约束?

Yii2:如何在我的模型中添加一个检查约束?
EN

Stack Overflow用户
提问于 2018-05-31 17:35:26
回答 1查看 177关注 0票数 0

我在我的数据库中有一个表的检查:

代码语言:javascript
运行
复制
CHECK (since <= until)

一直到都是日期。

我想将这个约束添加到我的模型中,但我不知道如何实现:

代码语言:javascript
运行
复制
public function rules()
{
    return [
        [['since', 'until'], 'required'],
        [['since', 'until'], 'safe'],
    ];
}
EN

回答 1

Stack Overflow用户

发布于 2018-05-31 18:30:34

您需要使用CompareValidator

代码语言:javascript
运行
复制
public function rules()
{
    return [
        [['since', 'until'], 'required'],
        [['since'], 'compare', 'compareAttribute' => 'util', 'operator' => '<='],
    ];
}

这将进行字符串比较,如果您使用的是ISO 8601格式的日期,则应该会工作。在其他情况下,您需要首先将日期转换为时间戳:

代码语言:javascript
运行
复制
public function rules()
{
    return [
        [['since', 'until'], 'required'],
        ['since', 'date', 'timestampAttribute' => 'since'],
        ['until', 'date', 'timestampAttribute' => 'until'],
        [['since'], 'compare', 'compareAttribute' => 'util', 'operator' => '<=', 'enableClientValidation' => false],
    ];
}

比较验证器只能用于比较字符串和数字。如果您需要比较日期之类的值,则有两个选项。要将日期与固定值进行比较,只需使用date验证器并指定其$min$max属性。如果需要比较表单中输入的两个日期,例如fromDatetoDate字段,您可以使用比较和日期验证器的组合,如下所示: 'fromDate','date','timestampAttribute‘=> 'fromDate','toDate','date','timestampAttribute’=> 'toDate','fromDate','compareAttribute‘=> 'toDate','operator’=> '<','enableClientValidation‘=> false, 当验证器按照指定的顺序执行时,这将首先验证在fromDatetoDate中输入的值是有效的日期值,如果是的话,它们将被转换为机器可读的格式。然后,将这两个值与比较验证器进行比较。客户端验证没有启用,因为这只在服务器端工作,因为日期验证器目前不提供客户端验证,因此在比较验证器上也将$enableClientValidation设置为false

https://www.yiiframework.com/doc/guide/2.0/en/tutorial-core-validators#comparing-date-values

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

https://stackoverflow.com/questions/50629833

复制
相关文章

相似问题

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