yii2的yii\db\ActiveRecord::deleteAll()请慎用

来源:互联网 发布:天猫魔盒用什么软件 编辑:程序博客网 时间:2024/05/18 01:52

通常情况下框架的删除数据的方法是需要加条件才能够删数据的,基本上市框架强制的要求。没有添加删除条件是删除不了的,但是yii2框架就不一样。如果你操作不当就只能去早点儿阅读下《mysql从精通到跑路》这本书了。

yii2的deleteAll($condition)如果不传条件会整张表的数据都删除,这就是后果,从此你就可以跑路了,下边我们要分析下原因。


public static function deleteAll($condition = '', $params = []){    $command = static::getDb()->createCommand();    $command->delete(static::tableName(), $condition, $params);    return $command->execute();}
以上是deleteAll()的静态方法,重点实现还是调用了delete()方法,再来看看delete()方法
public function delete($table, $condition, &$params){    $sql = 'DELETE FROM ' . $this->db->quoteTableName($table);    $where = $this->buildWhere($condition, $params);    return $where === '' ? $sql : $sql . ' ' . $where;}
方法中使用buildWhere()来构建条件语句。去看看
public function buildWhere($condition, &$params){    $where = $this->buildCondition($condition, $params);    return $where === '' ? '' : 'WHERE ' . $where;}
看到了吧
return $where === '' ? '' : 'WHERE ' . $where;这句,竟然判断如果为空则返回空。

本文为魏永强原创作品未经允许不得转载:MarsWill »yii2的yii\db\ActiveRecord::deleteAll()请慎用

0 1
原创粉丝点击