Active Record属性如何与模型类不同? 我有一个用户模型,其中有一个名为dob的数据库列。我不会从用户那里接受dob作为一个整体因此规则函数将不会有dob但是instaed,'date,month,year'
array('date, month, year', 'validDate'),
我正在做这个
public function afterValidate()
{
parent::afterValidate();
$this->date_of_birth = date("Y-m-d", strtotime($this->year."".$this->month."".$this->date));
}
将记录的值保存在数据库中。我不太确定它是Active Reocrd的东西还是Model,但是日期存储的不是用户输入的,而是1970-01-01 Unix默认,所以我肯定会做错事。 附:我的日期月份和年份在规则上是安全的。 validDate的代码
public function validDate($attributes, $params)
{
if($this->scenario == 'registration-general')
{
if($this->month == 0)
$this->addError('month','Month cannot be blank');
elseif(0 > $this->month || $this->month > 12)
$this->addError('month','Enter a valid month');
}
}
答案 0 :(得分:1)
确保在模型中定义年,月和日。
public $year;
public $month;
public $date;
如果未定义这些内容,则在大规模分配(或任何分配)期间不会分配它们,并且您的代码(在我的系统上测试)将返回1970-01-01。
同时将您的strtotime参数更改为:
$this->year."-".$this->month."-".$this->date
使用连字符,您可以使用1位或2位数的月份和日期格式。如果没有连字符,则需要使用2位数,但在代码中注明建议您保证。
上述任何一个问题都可能导致您的代码失败。确保它们已修复,然后查看它是否有效。
修改:除非您将save()
作为参数传递,否则validate()
方法会调用false
方法。如果在validate
和save
之间未设置年,月和日期,则第二轮验证将删除dob
属性。
简而言之,如果您在脚本中使用save(false)
,请致电validate()
进行保存。