thinkphp
thinkphp copied to clipboard
Db/Driver.class.php多表删除和更新问题
数据库Driver.class.php中的delete方法对多表删除的支持如下:
if (strpos($table, ',')) {
// 多表删除支持USING和JOIN操作
if (!empty($options['using'])) {
$sql .= ' USING ' . $this->parseTable($options['using']) . ' ';
}
$sql .= $this->parseJoin(!empty($options['join']) ? $options['join'] : '');
}
这样的只能支持多表关联删除时删除多个表的情况,实际上可能会有多表关联时只删除其中一个表的情况,如下:
DELETE FROM u USING `tb_role r, tb_user u
WHERE r.role_id = u.role AND r.status = 2
这句sql只是删除了user表的记录,只是用role表进行条件过滤,这样的需求我感觉比多表关联删除时删除多个表还要多,所以建议把if (strpos($table, ',')) {}条件去掉。
更新时问题与这类似。