laravel 批量更新

//-------------------------------------------------------------------
    // @批量修改  $data--二维数组   $field--update的where条件字段:一般是id
    // 单条 gender=0 : !empty($fields) 改为 isset($fields)
    //-------------------------------------------------------------------
    public static function batchUpdate($table, $data, $field, $params = array())
    {
        if (!is_array($data) || !$field || !is_array($params)) {
            return false;
        }
        $updates = self::parseUpdate($data, $field);
        $where = self::parseParams($params);
        $fields = array_column($data, $field);

        if (isset($fields)) {
            foreach ($fields as &$value) {
                if (!empty($value)) {
                    $value = '"' . addslashes($value) . '"';
                }
            }
            $fields = !empty($fields) ? implode(',', $fields) : '';
        }
        $sql = '';
        if (isset($fields)) {
            $sql = sprintf("UPDATE %s SET %s WHERE `%s` IN (%s) %s", $table, $updates, $field, $fields, $where);
        }
        return $sql;
    }

    private static function parseUpdate($data, $field)
    {
        $sql = '';
        $keys = array_keys(current($data));
        foreach ($keys as $column) {

            $sql .= sprintf("`%s` = CASE `%s` \n", $column, $field);
            foreach ($data as $line) {
                $sql .= sprintf("WHEN \"%s\" THEN \"%s\" \n", trim($line[$field]), trim($line[$column]));
            }
            $sql .= "END,";
        }
        return rtrim($sql, ',');
    }

    private static function parseParams($params)
    {
        $where = array();
        foreach ($params as $key => $value) {
            $where[] = sprintf("`%s` = '%s'", trim($key), trim($value));
        }
        return $where ? ' AND ' . implode(' AND ', $where) : '';
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值