Yii deleteAll()条件记录

093gszye  于 2022-11-09  发布在  其他
关注(0)|答案(5)|浏览(202)

我已经设置了一个登录过程,在该过程中生成验证码,并在成功后删除。但是,我想确保如果同一用户有多个验证码,在登录成功后,删除该用户的所有记录。
这是我的代码

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。有人能看出我哪里错了吗?

iszxjhcz

iszxjhcz1#

如果要删除具有指定属性的记录,最简洁的方法是使用deleteAllByAttributes()

VerificationCode::model()->deleteAllByAttributes(['user_id' => $user->id]);
jdzmm42g

jdzmm42g2#

似乎您调用函数delete()的方式不对...请尝试以这种方式传递值

VerificationCode::model()->deleteAll('user_id = :user_id', array(':user_id' => $user->id));
a11xaf1n

a11xaf1n3#

对于Yii2,记录的方法是使用函数deleteAll()
我通常以数组的形式传递参数,如下所示:

VerificationCode::deleteAll(['user_id' => $user->id]);
nfeuvbwi

nfeuvbwi4#

同样,你也可以使用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
}
ecbunoof

ecbunoof5#

您可以使用以下方法从数据库中删除所有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);

也可以直接在控制器操作中使用另一种方法
用户ID =:用户ID =:用户ID=:用户ID=:用户ID =:用户ID =:
使用以下方法重定向URL
系统管理员/系统管理员/系统管理员/系统管理员

相关问题