Laravel ORM SQL 语句查询、查看,附赠 IDE ORM 语法提示
WIKI 文章已存在相关教程,详见:
Laravel 数据库:输出 SQL 语句
ORM 中 SQL 查询查看#
查过很多查询 SQL 的方法,但发现非常多问题:
- 改起来太麻烦
- 安装各种插件
- 好不容易找到代码了,改了之后却发现压根没生效...
所以对于中大型项目来说,最好就是一段代码解决问题。以下方法正好满足上面 2 个问题:
- 无需安装任何插件,并且 改动幅度小(只需改一个文件)
- 简单易用,解决后顾之忧~
功能适合于 Laravel 5.5 ~ 5.8 版本
一、修改文件#
在 app/Providers/AppServiceProvider
中的 boot
方法中新增以下代码:
\Illuminate\Database\Query\Builder::macro('sql', function () {
$bindings = $this->getBindings();
$sql = str_replace('?','%s',$this->toSql());
return vsprintf($sql, $bindings);
});
\Illuminate\Database\Eloquent\Builder::macro('sql', function(){
return ($this->getQuery()->sql());
});
二、使用方式#
查询带参数的 SQL 语句可在 ORM 后调用方法
// 正确用法
User::query()->where('id', 1)->sql();
// 错误用法
User::query()->where('id', 1)->get()->sql();
User::query()->where('id', 1)->first()->sql();
三、效果预览#
select * from user where id = 1
「帖外话」ORM 的 IDE 函数语法提示#
可在模型中新增静态方法 query()
,后续的 where()
、orderByDesc()
等等相关的 ORM 都能有语法提示。
值得 注意 的是:这里仅仅为了有提示,方便开发者调试、查看相关参数使用方式,但实际上 官方推荐 的写法是不带
query()
的,如:User::where()->get();
User::query()->where('id', 1)->sql();
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: