«

laravel print orm sql

时间:2025-6-10 16:06     作者:wanzi     分类: php


升级版方法封装,支持Eloquent query builder 以及 DB query builder


 public static function getOrmSql($query): string
    {
        if ($query instanceof \Illuminate\Database\Eloquent\Builder || $query instanceof \Illuminate\Database\Query\Builder) {
            $userSql = $query->toSql();
            $userBindings = $query->getBindings();
        } elseif ($query instanceof \Illuminate\Database\Events\QueryExecuted) {
            $userSql = $query->sql;
            $userBindings = $query->bindings;
        } else {
            return '';
        }

        $placeholderCount = substr_count($userSql, '?');

        if ($placeholderCount === 0 || $placeholderCount !== count($userBindings)) {
            return $userSql;
        }

        $formattedBindings = array_map(function ($binding) {
            if (is_numeric($binding)) {
                return $binding;
            } elseif (is_null($binding)) {
                return 'NULL';
            } else {
                return "'" . addslashes($binding) . "'";
            }
        }, $userBindings);

        if (str_contains($userSql, '%')) {
            return str_replace(explode(' ', str_repeat('?', $placeholderCount)), $formattedBindings, $userSql);
        }

        return vsprintf(str_replace('?', '%s', $userSql), $formattedBindings);
    }