通常情况下框架的删除数据的方法是需要加条件才能够删数据的,基本上市框架强制的要求。没有添加删除条件是删除不了的,但是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()请慎用