You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Laravel Eloquent语句转换为SQL查询?求在线生成器或脚本

将Laravel Eloquent转换为SQL查询的方法

一、本地实用方案

  • 增强版toSql()转换函数:Laravel原生的->toSql()仅返回SQL结构,不带绑定参数,你可以自己实现一个小工具函数,自动替换参数,生成可直接执行的完整SQL:
function eloquentToRawSql($query)
{
    return vsprintf(
        str_replace('?', '%s', $query->toSql()),
        collect($query->getBindings())->map(function ($binding) {
            return is_numeric($binding) ? $binding : "'" . addslashes($binding) . "'";
        })->toArray()
    );
}

使用示例:

$userQuery = User::where('age', '>', 20)->orderBy('created_at', 'desc');
echo eloquentToRawSql($userQuery);

输出的SQL可直接复制到数据库管理器执行。

  • Laravel Tinker命令行:在项目根目录执行php artisan tinker,直接输入你的Eloquent查询代码并链式调用->toSql()或上面的自定义函数,就能快速获取结果,无需额外编写脚本。

二、本地离线转换工具

你可以在本地Laravel项目中创建一个简单的转换页面(仅本地使用,避免安全风险):

  1. 新建eloquent-converter.php文件,引入项目的自动加载文件和应用实例;
  2. 添加表单用于输入Eloquent代码,通过eval执行并转换(注意仅本地使用,禁止在生产环境部署):
<?php
require __DIR__.'/vendor/autoload.php';
$app = require_once __DIR__.'/bootstrap/app.php';

function eloquentToRawSql($query) {
    // 粘贴上面的转换函数代码
}

if ($_POST['eloquent'] ?? false) {
    $eloquentCode = $_POST['eloquent'];
    try {
        $query = eval("return {$eloquentCode};");
        echo "<pre>".eloquentToRawSql($query)."</pre>";
    } catch (Exception $e) {
        echo "执行错误:".$e->getMessage();
    }
}
?>
<form method="post">
    <textarea name="eloquent" rows="6" cols="80">User::where('email', 'like', '%@example.com')->take(5)</textarea>
    <br>
    <button type="submit">转换为SQL</button>
</form>

访问这个页面就能快速粘贴Eloquent代码生成可执行SQL。

三、注意事项

  • 禁止在生产环境使用含eval的工具,避免代码注入风险;
  • 转换复杂关联查询或子查询后,建议先在本地数据库验证SQL语法正确性;
  • 自定义转换函数需注意处理特殊字符(如单引号),避免生成无效SQL。

内容的提问来源于stack exchange,提问作者iwan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 07:42:44