如何删除Yii2中的行?

如何删除Yii2中的行?,yii2,Yii2,我想根据某些条件删除数据库中的一行。我试过这样做 $fanclub = FanClub::find()->where(['user_id'=>$userid])-> andwhere(['crew_member_id'=>$id])->one(); if($fanclub) { $fanclub->delete();

我想根据某些条件删除数据库中的一行。我试过这样做

$fanclub        =   FanClub::find()->where(['user_id'=>$userid])->
            andwhere(['crew_member_id'=>$id])->one();
            if($fanclub)
            {
                $fanclub->delete();
            }
这是删除数据库中的行的正确方法吗?

使用模型(
ActiveRecord
)时,是的,这是正确的方法

您可以使用
$model->delete()
删除模型。因此,将删除相关表中的相应行

您可以将
beforeDelete()
afterDelete()
事件处理程序与此方法一起使用,以处理与删除相关的一些任务

不使用模型的备选方案:

\Yii::$app
    ->db
    ->createCommand()
    ->delete('users', ['id' => 1])
    ->execute();

你可以用这种方式

ProjectEmployee::deleteAll(['and',
            [ 'employee_id'=>$this->id],
            ['in', 'project_id', [2,5,7]]]
        );

在这里,您将首先获取记录,但您可以直接进行

$fanclub = FanClub::find()
  ->where(['user_id'=>$userid])
  ->andwhere(['crew_member_id'=>$id])
  ->one()
  ->delete();

…这没有解释。这很好用,但如果我用它进行更新查询,它是sql注入保存吗?为什么会被否决?也许这是最直截了当的答案。
ProjectEmployee::deleteAll(['and',
            [ 'employee_id'=>$this->id],
            ['in', 'project_id', [2,5,7]]]
        );
$fanclub = FanClub::find()
  ->where(['user_id'=>$userid])
  ->andwhere(['crew_member_id'=>$id])
  ->one()
  ->delete();