laravel 框架打印完整sql语句
选项 1. getQueryLog:
要使用,你需要手动开启:
要将 SQL 输出到屏幕,你可以使用:
最近的查询语句将位于数组的底部。
类似下面这样:
| array:1 [ 0 => array:3 [ "query" => "select * from `users` where `name` = ?" "bindings" => array:1 [ 0 => "myname" ] "time" => 1.19 ] ]
|
选项 2. getQueryLog:
对于 laravel 5.5.X
如果你希望接收应用程序执行的每个 SQL 查询,可以使用 listen 方法。 此方法对于记录查询或调试很有用。 你可以在服务提供者中注册你的查询侦听器:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| <?php
namespace App\Providers;
use Illuminate\Support\Facades\DB; use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider {
public function boot() { DB::listen(function ($query) { }); }
public function register() { } }
|
选项 3. toSql:
你可以使用 toSql() 方法做以下的事情,
| $query = \DB::table('users')->where('name', 'myname');
echo $query->toSql();
|
Output:
| select * from `users` where `name` = ?
|
想要绑定数据?使用以下方法:
| $query = \DB::table('users')->where('name', 'myname'); $sql = str_replace_array('?', $query->getBindings(), $query->toSql());
echo $sql;
|
输出:
| select * from `users` where `name` = myname
|
选项 4. 改进后的 toRawSql (推荐):
我们来自定义一个 ‘macroable’ 带有获取绑定数据的 SQL 查询替换 toSql.
添加以下宏方法到 AppServiceProvider boot().
| \Illuminate\Database\Query\Builder::macro('toRawSql', function(){ return array_reduce($this->getBindings(), function($sql, $binding){ return preg_replace('/\?/', is_numeric($binding) ? $binding : "'".$binding."'" , $sql, 1); }, $this->toSql()); });
|
为 Eloquent Builder 添加别名. (Laravel 5.4+)
| \Illuminate\Database\Eloquent\Builder::macro('toRawSql', function(){ return ($this->getQuery()->toRawSql()); });
|
然后像往常一样调试. (Laravel 5.4+)
E.g. Query Builder
| >>> echo \DB::table('users')->where('name', 'myname')->toRawSql(); select * from `users` where `name` = 'myname'
|
E.g. Eloquent Builder
| >>> echo User::where('name', 'myname')->toRawSql(); select * from `users` where `name` = 'myname'
|