我已经设置了一个登录过程,其中生成了验证码,然后在成功时将其删除。但是,我想确保如果同一用户有多个验证码,则在登录成功后,删除该用户的所有记录。
这是我的代码
if ($model->validate() && $model->login()) {
//delete this verification code
$verificationCode->delete();
//delete all existing codes for user_id
VerificationCode::model()->deleteAll('user_id',$user->id);
Yii::app()->user->setReturnUrl(array('/system/admin/'));
$this->redirect(Yii::app()->user->returnUrl);
}
然而,这似乎只是删除了所有记录,无论表中的user_id不同。谁能看到我出错的地方?
答案 0 :(得分:2)
如果要删除具有指定属性的记录,最简单的方法是使用deleteAllByAttributes()
:
VerificationCode::model()->deleteAllByAttributes(['user_id' => $user->id]);
答案 1 :(得分:0)
似乎你以错误的方式调用函数delete()...尝试以这种方式传递值
VerificationCode::model()->deleteAll(['user_id' => $user->id]);
答案 2 :(得分:0)
此外,您可以使用afterDelete
方法,以确保每次或每个地方有人删除一个verificationCode,您的应用程序也将删除每个userVerificationCode。将它放在您的verificationCode模型类中:
protected function afterDelete()
{
parent::afterDelete();
VerificationCode::model()->deleteAll('user_id = :user:id',[':user_id' =>$this->user_id]);
//... any other logic here
}
答案 3 :(得分:0)
对于 Yii2,documented 的方式是使用函数 deleteAll()
。
我通常将参数作为数组传递,如下所示:
VerificationCode::deleteAll(['user_id' => $user->id]);
答案 4 :(得分:-1)
您可以使用以下方法从数据库中删除所有user_id条目:
$criteria = new CDbCriteria;
// secure way for add a new condition
$criteria->condition = "user_id = :user_id ";
$criteria->params[":user_id"] = $user->id;
// remove user related all entry from database
$model = VerificationCode::model()->deleteAll($criteria);
或者你可以直接在控制器动作中使用另一种方法
VerificationCode :: model() - > deleteAll(“user_id =:user_id”,[“:user_id” => $用户> ID]);
使用以下方法重定向网址
$这 - &以及c() - >重定向(Yii的::应用程序() - > createUrl( '/系统/管理/'));