Laravel 中轻松容易的输出完整的 SQL 语句

laravel 中自带的查询构建方法 toSql 得到的 sql 语句并未绑定条件参数,类似于这样 select * from users where id = ?,所以写了个扩展包 laravel-dump-sql ,可以获取完整的 sql 语句。

源码

安装

$ composer require guanguans/laravel-dump-sql -v

发布服务

$ php artisan vendor:publish --provider="Guanguans\\LaravelDumpSql\\ServiceProvider"

使用

安装成功后查询构建器会新增 toRawSqldumpSqlddSql 三个方法

// 获取 SQL
User::where('id', 1)->toRawSql();
DB::table('user')->where('id', 1)->toRawSql();

// 打印 SQL
User::where('id', 1)->dumpSql();
DB::table('user')->where('id', 1)->dumpSql();

// 打印 SQL 并退出
User::where('id', 1)->ddSql();
DB::table('user')->where('id', 1)->ddSql();

自定义方法名称

发布配置文件

$ php artisan vendor:publish --tag=laravel-dump-sql

config/dumpsql.php 文件中配置方法名称既可

<?php
return [
    /*
     * Get sql statement.
     */
    'to_raw_sql' => 'Your favorite method name',

    /*
     * Print SQL statements.
     */
    'dump_sql' => 'Your favorite method name',

    /*
     * Print SQL statements and exit.
     */
    'dd_sql' => 'Your favorite method name',
];
本作品采用《CC 协议》,转载必须注明作者和本文链接
No practice, no gain in one's wit. 我的 Gitub
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 19

laravel自带方法额。toSql()

3年前 评论
wanghan

是啊,可以toSql啊。。这个包干啥用

3年前 评论

自带的 toSql() dd()都可以打印 sql 语句

3年前 评论

@wanghan

@zhougongjin

自带的 toSql

echo Goods::where(['review_status' => 3, 'is_on_sale' => 1, ['goods_number', '>', 0]])->toSql();
select * from `tbb_goods` where (`review_status` = ? and `is_on_sale` = ? and `goods_number` > ?)

新增的 toRawSql

echo Goods::where(['review_status' => 3, 'is_on_sale' => 1, ['goods_number', '>', 0]])->toRawSql();
select * from `tbb_goods` where (`review_status` = 3 and `is_on_sale` = 1 and `goods_number` > 0)
3年前 评论

@xujinhuan

自带的 dd

Goods::where(['review_status' => 3, 'is_on_sale' => 1, ['goods_number', '>', 0]])->dd();
select * from `tbb_goods` where (`review_status` = ? and `is_on_sale` = ? and `goods_number` > ?)

新增的 ddSql

Goods::where(['review_status' => 3, 'is_on_sale' => 1, ['goods_number', '>', 0]])->ddSql();
select * from `tbb_goods` where (`review_status` = 3 and `is_on_sale` = 1 and `goods_number` > 0)
3年前 评论
guanguans (作者) (楼主) 3年前
wanghan 3年前

@www295686243

现在可以了,尝试重新安装

3年前 评论

@guanguans 啊,是这样,确实方便很多OvO

3年前 评论

file
发布服务不行?
我貌似只能去列表里选tag发布

php artisan vendor:publish

file
但好像用不了?我姿势不对?

3年前 评论

@www295686243

laravel5.5 以上不用发布服务,安装完后直接使用就可以了。

3年前 评论
www295686243 3年前
guanguans (作者) (楼主) 3年前

输错一个字符就可以看到完整SQL了 :joy:

3年前 评论
composer require overtrue/laravel-query-logger --dev -vvv
3年前 评论

@crazy

我知道超哥的这个包,当然还有很多其他以 log 形式记录 sql 的包。

3年前 评论
\Illuminate\Database\Query\Builder::macro('buildSql', function () {
    $bindings = $this->getBindings();
    $sql = str_replace('?', "'%s'", $this->toSql());
    return vsprintf($sql, $bindings);
});
3年前 评论
aa24615

可以,支持!

3年前 评论

官方包 telescope 更香, 不过还是支持造轮子!

3年前 评论
aa24615 3年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
未填写
文章
55
粉丝
126
喜欢
971
收藏
1332
排名:46
访问:15.2 万
私信
所有博文
社区赞助商