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);
}