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

How to get the save query in Laravel?

如何在保存数据时执行 sql?例如,

 $user = New User;
 $user->name = "test";
 $user->mail = "test@example.com";
 $user->save();

我不想执行查询。我只想获取查询字符串。(类似于 "INSERT INTO users.....")

我试过了$user->toSql();。但它给出了 "select * from users" 这是错误的。

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

你可以在这里做两件事

一个,使用DB::listen

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

二,如果需要更多详细信息,请查询 QueryLog。

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

如果你不想运行查询,就用DB::pretend包裹起来,就像你做迁移时添加--pretend,这样你就不会迁移DB 您将获得所有 sql 脚本。


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