我有一个AR模型,它有以下规则:
/**
* @inheritdoc
*/
public function rules() {
return [
[['category_id', 'source', 'url', 'title', 'thumbs', 'duration', 'status', 'created_at'], 'required'],
[['category_id', 'status', 'views', 'ratings', 'created_at'], 'integer'],
[['rating'], 'double'],
[['source', 'url', 'title', 'slug'], 'string', 'max' => 255],
[['url'], 'unique', 'on' => 'create'],
[['category_id'], 'exist', 'skipOnError' => true, 'targetClass' => Category::className(), 'targetAttribute' => ['category_id' => 'id']],
];
}
我想进行软删除,所以我有以下内容。
/**
* Deletes an existing Video model.
* If deletion is successful, the browser will be redirected to the 'index' page.
* @param integer $id
* @return mixed
*/
public function actionDelete($id)
{
$model = $this->findModel($id);
$model->status = 0;
//var_dump($model->validate());
//var_dump($model->getErrors());die;
$model->save();
return $this->redirect(['index']);
}
但不幸的是我无法改变模型的状态,因为验证说(已经采取了url xxxxxxx)所以我去了PostgreSql,我检查了记录,但不幸的是只有更新记录才有这个值!所以在我看来,Yii2独特的有效性是不好的。我想删除唯一的验证器,但似乎这是不可能的。因为我注释掉规则数组中的uniqure行,但它对我没有帮助。我重新启动机器,但我不知道,似乎Yii2想要始终检查网址是否独特。
答案 0 :(得分:2)
您可以使用方案
public function scenarios()
{
$scenarios = parent::scenarios();
$scenarios['soft_delete'] = ['status',]; //Scenario Values Only Accepted
return $scenarios;
}
public function actionDelete($id)
{
$model = $this->findModel($id);
$model->status = 0;
$model->scenario = 'soft_delete';
//var_dump($model->validate());
//var_dump($model->getErrors());die;
$model->save();
return $this->redirect(['index']);
}
或其他方式是禁止对此操作进行验证
public function actionDelete($id)
{
$model = $this->findModel($id);
$model->status = 0;
//var_dump($model->validate());
//var_dump($model->getErrors());die;
$model->save(false);
return $this->redirect(['index']);
}