包 | behavior |
---|---|
类层次 | Model_Behavior_Uniqueness » QDB_ActiveRecord_Behavior_Abstract |
实现的接口 | |
版本 | $Id: uniqueness.php 2638 2009-07-30 08:12:24Z jerry $ |
Behavior_Uniqueness 用于检查指定的属性是否存在重复值
uniqueness 行为插件支持下列设置选项:
假设 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' => 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' => '前缀和后缀的组合不能出现重复', ),
上述设置的效果:
属性 | 类型 | 描述 | 定义于 |
---|---|---|---|
$_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 |