如何在 Laravel 中获取保存查询?

Nab*_*han 1 sql laravel eloquent laravel-5.7

当我保存一些数据时,如何让sql执行?例如,

 $user = New User;
 $user->name = "test";
 $user->mail = "test@example.com";
 $user->save();
Run Code Online (Sandbox Code Playgroud)

我不想执行查询。我只想获取查询字符串。(类似于“INSERT INTO 用户.....”)

我试过了$user->toSql();。但它给出了“从用户中选择*”,这是错误的。

And*_*ong 6

toSql();用于模型查询构建器。所以这就是为什么当$user->toSql();你得到 select all 语句时。

你可以在这里做两件事

一、使用 DB::listen

    DB::listen(function ($query) {
        echo $query->sql;
    });
 $user = New User;
 $user->name = "test";
 $user->mail = "test@example.com";
 $user->save();
Run Code Online (Sandbox Code Playgroud)

二、QueryLog 如果你需要更多的细节。

DB::enableQueryLog();
 $user = New User;
 $user->name = "test";
 $user->mail = "test@example.com";
 $user->save();
dd(DB::getQueryLog());
Run Code Online (Sandbox Code Playgroud)

如果您不想运行查询,只需DB::pretend像执行迁移添加时一样将其包装起来--pretend,这样您就不会迁移DB您将获得所有sql脚本。


    DB::pretend(function () {
         $user = New User;
         $user->name = "test";
         $user->mail = "test@example.com";
         $user->save();
    });
Run Code Online (Sandbox Code Playgroud)

  • 在这两种情况下,查询都在执行。有没有办法只获取查询字符串而不执行它? (2认同)