thinkphp icon indicating copy to clipboard operation
thinkphp copied to clipboard

Db/Driver.class.php多表删除和更新问题

Open phantom0424 opened this issue 9 years ago • 0 comments

数据库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, ',')) {}条件去掉。

更新时问题与这类似。

phantom0424 avatar Jun 20 '16 09:06 phantom0424