这是我的控制器代码
if ($this->request->isPost) {
$model->created_by = Yii::$app->user->identity->id;
$model->created_at = date('Y/m/d');
// echo $model->created_at;die;
if ($model->load($this->request->post()) && $model->save()) {
return $this->redirect(['index', 'id' => $model->id]);
}
}
这就是我的模型规则
public function rules()
{
return [
[['deduction_type'], 'required'],
[['created_at'], 'safe'],
[['created_by'], 'integer'],
[['deduction_type'], 'string', 'max' => 100],
];
}
我的问题是,每次我传递create_at和create_by中的值时,数据在数据库中保存为null。我希望我的实际值保存在db中。
3条答案
按热度按时间n3ipq98p1#
而不是你的方式
我通常会这样做:
validate()
-〉根据您的规则检查输入是否正确。然后您知道输入正确,您可以设置您的值。这是我处理这个问题的常用方法,你也可以用一个
if
来 Package$model->save();
,以检查你的修改,并捕捉保存()中潜在的false
。wydwbb8l2#
检查您的POST,它是否发送空字段created_at和created_by?不要在POST中发送此字段,load()方法不会在空值上替换它。
kpbpu0083#
如果确实要插入当前用户ID和当前时间,请使用BlameableBehavior和TimestampBehavior。
BlameableBehavior自动使用当前用户ID填充指定属性。https://www.yiiframework.com/doc/api/2.0/yii-behaviors-blameablebehavior
TimestampBehavior自动用当前时间戳填充指定属性。https://www.yiiframework.com/doc/api/2.0/yii-behaviors-timestampbehavior