包 core

包 mvc

包 orm

包 form

包 database

包 helper

包 cache

包 webcontrols

包 behavior

包 exception

包 debug

类 - Model_Behavior_Uniqueness

behavior
类层次 Model_Behavior_Uniqueness » QDB_ActiveRecord_Behavior_Abstract
实现的接口
版本 $Id: uniqueness.php 2638 2009-07-30 08:12:24Z jerry $

Behavior_Uniqueness 用于检查指定的属性是否存在重复值

uniqueness 行为插件支持下列设置选项:

  • check_props: 要检查的属性

    假设 email 属性不允许重复,则 check_props 设置为 'email' 即可。

    当在创建和更新对象时,如果发现重复的 email 属性值,

    则会抛出 QDB_ActiveRecord_ValidateFailedException 异常。

    如果要检查多个属性的值是否重复,可以将 check_props 设置为 'username, email' 的形式。

    每个属性名之间用逗号分隔。

    如果要验证的属性是一个 BELONGS_TO 或 HAS_ONE 关联,则会以关联模型的主键值作为检查条件。

    // category 是模型的一个 BELONGS_TO 关联
    'check_props' => 'category',

    对于 HAS_MANY 和 MANY_TO_MANY 关联模型的验证不支持。

  • error_messages: 当某个属性出现重复值时,要在异常中使用的错误信息。

    error_messages 设置是一个数组,以属性名为键名,错误信息为键值,例如:

    'error_messages' => array(
        'username' => '用户名不能重复',
        'email'    => '电子邮件地址不能重复',
    ),

组合验证

有时候,我们希望能够验证多个属性值的组合是否出现重复。 例如 prefix 和 suffix 属性值的组合不能重复,此时可以在 check_props 设置中写上:

'check_props' => 'prefix+suffix',

则在创建和更新对象时,将以 prefix 和 suffix 两个属性值的组合来检查。 对于这类组合检查,error_messages 应该设置为:

'error_messages' => array(
    'prefix+suffix' => '前缀和后缀的组合不能出现重复',
),

混合使用

我们可以将单个属性的检查和组合属性的检查结合起来使用:

'check_props' => 'username, email, prefix+suffix',
'error_messages' => array(
    'username' => '用户名不能重复',
    'email'    => '电子邮件地址不能重复',
    'prefix+suffix' => '前缀和后缀的组合不能出现重复',
),

忽略空值的检查

如果某些属性值允许为空(null 或空字符串),那么应该在属性名后面加上“?”来注明:

'check_props' => 'username, email?, prefix+suffix?',
'error_messages' => array(
    'username' => '用户名不能重复',
    'email'    => '电子邮件地址不能重复',
    'prefix+suffix' => '前缀和后缀的组合不能出现重复',
),

上述设置的效果:

  • 如果 email 属性值为空,则不会检查 email 属性值。
  • 如果 suffix 属性值为空,则不会检查 prefix+suffix 属性值的组合。

保护的属性

隐藏继承的属性

属性类型描述定义于
$_settings array 插件的设置信息 Model_Behavior_Uniqueness
$_meta QDB_ActiveRecord_Meta ActiveRecord 继承类的元信息对象 QDB_ActiveRecord_Behavior_Abstract

公共方法

隐藏继承的方法

方法描述定义于
bind() 绑定行为插件 Model_Behavior_Uniqueness
_before_create() BEFORE_CREATE 事件的处理函数 Model_Behavior_Uniqueness
_before_update() BEFORE_UPDATE 事件的处理函数 Model_Behavior_Uniqueness
__construct() 构造函数 QDB_ActiveRecord_Behavior_Abstract
normalizeConfig() 格式化配置 QDB_ActiveRecord_Behavior_Abstract
unbind() 撤销行为插件绑定 QDB_ActiveRecord_Behavior_Abstract

保护的方法

隐藏继承的方法

方法描述定义于
_addDynamicMethod() 为 ActiveRecord 对象添加一个动态方法 QDB_ActiveRecord_Behavior_Abstract
_addStaticMethod() 为 ActiveRecord 类添加一个静态方法 QDB_ActiveRecord_Behavior_Abstract
_addEventHandler() 为 ActiveRecord 对象添加一个事件处理函数 QDB_ActiveRecord_Behavior_Abstract
_setPropGetter() 设置一个属性的 getter 方法 QDB_ActiveRecord_Behavior_Abstract
_setPropSetter() 设置一个属性的 setter 方法 QDB_ActiveRecord_Behavior_Abstract

属性详细说明

$_settings 属性

插件的设置信息

方法详细说明

bind() 方法

public void bind()

绑定行为插件


_before_create() 方法

public void _before_create($obj)

$obj
{return}

BEFORE_CREATE 事件的处理函数


_before_update() 方法

public void _before_update($obj)

$obj
{return}

BEFORE_UPDATE 事件的处理函数