Yii deleteAll()记录条件

时间:2016-05-03 16:28:26

标签: php yii

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

这是我的代码

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不同。谁能看到我出错的地方?

5 个答案:

答案 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( '/系统/管理/'));