haru0 / eloquent-sql-dumper
Laravel的Eloquent SQL导出器
Requires (Dev)
- laravel/framework: 5.7.*
- phpunit/phpunit: ^8.0
This package is auto-updated.
Last update: 2024-09-29 04:03:34 UTC
README
Eloquent SQL dumper
这个Laravel包引入了一个简单的服务,用于导出带有绑定值的SQL。
这个仓库源于我的个人博客,旨在简要说明Laravel的Illuminate\Support\Traits\Macroable
的优势。
功能
提供的Haru0\EloquentSqlDumper\ServiceProvider
在Illuminate\Database\Query\Builder
上注册了一个dump
宏,然后可以用于记录和调试。
尽管如此,我强烈建议您不要在生产环境中使用这个库进行日志记录。我认为这不是正确的方式,您应该寻找专门的日志解决方案。
安装
composer require --dev haru0/eloquent-sql-dumper
此包支持package-discovery,在将其添加到Composer依赖项后即可直接使用。
如果您的项目禁用了package-discovery功能,则需要手动注册Haru0\EloquentSqlDumper\ServiceProvider
。这可以通过在config/app.php
文件中添加以下行来完成。
/* * Package Service Providers... */ Haru0\EloquentSqlDumper\ServiceProvider::class,
没有可用的配置选项。
用法
Haru0\EloquentSqlDumper\Services\DumperService
一旦注册,就可以在任何地方基本使用。它也很容易进行覆盖和扩展。
示例routes/web.php
文件
use Illuminate\Database\Query\Builder; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Route; Route::get('/', function () { $query = DB::query() ->from('users') ->where('active', true) ->where(function (Builder $builder) { $builder ->orWhere('email', 'like', '%gmail.com') ->orWhere('email', 'like', '%example.com'); }) ->orderByDesc('id') ->limit(10); dd($query->dump()); });
Tinker
版本,针对REPL爱好者
Psy Shell v0.9.9 (PHP 7.3.2-3+ubuntu18.04.1+deb.sury.org+1 — cli) by Justin Hileman >>> DB::query() \ ... ->from('users') \ ... ->where('active', true) \ ... ->where(function ($builder) { \ ... $builder \ ... ->orWhere('email', 'like', '%gmail.com') \ ... ->orWhere('email', 'like', '%example.com'); \ ... }) \ ... ->orderByDesc('id') \ ... ->limit(10) \ ... ->dump() => "select * from `users` where `active` = 1 and (`email` like '%gmail.com' or `email` like '%example.com') order by `id` desc limit 10"
覆盖和扩展
如果您需要调整或覆盖Haru0\EloquentSqlDumper\Services\DumperService
的功能,您可以将其实现绑定到合约,或者注册监听器来监听服务发出的两个事件。
根据您的需求,自定义dump
宏的一种方法是自己编写DumperService
并将其绑定到Haru0\EloquentSqlDumper\Contracts\DumperContract
。
use App\Services\MyDumper; use Haru0\EloquentSqlDumper\Contracts\DumperContract; $this->app->bind(DumperContract::class, MyDumper::class);
另一种自定义dump
宏的方法是注册一个监听器或订阅者来监听服务发出的Haru0\EloquentSqlDumper\Events\AfterDumpEvent
和Haru0\EloquentSqlDumper\Events\BeforeDumpEvent
事件。
最后,您还可以修改宏的名称(以防它与现有的名称冲突)。为此,调整配置选项或将ELOQUENT_SQL_DUMPER_MACRO
环境变量放入您的.env
文件中。
ELOQUENT_SQL_DUMPER_MACRO=foo_bar_baz
您可以通过覆盖配置文件来更改该环境。要做到这一点,您需要发布包配置文件,命令为
php artisan vendor:publish --provider=Haru0\EloquentSqlDumper\ServiceProvider
。
然后,使用它和dump
在用法章节中所示的方式相同。
宏名称始终被转换为驼峰命名法。在上面的例子中,您的宏将通过
$query->fooBarBaz
执行。
贡献
任何贡献都受欢迎。Fork此存储库并创建一个pull request。请记住提供简短描述。
许可证
MIT