haru0/eloquent-sql-dumper

Laravel的Eloquent SQL导出器

2.0.0 2019-03-03 12:07 UTC

This package is auto-updated.

Last update: 2024-09-29 04:03:34 UTC


README

CircleCI SymfonyInsight

Eloquent SQL dumper

这个Laravel包引入了一个简单的服务,用于导出带有绑定值的SQL。

这个仓库源于我的个人博客,旨在简要说明Laravel的Illuminate\Support\Traits\Macroable的优势。

功能

提供的Haru0\EloquentSqlDumper\ServiceProviderIlluminate\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\AfterDumpEventHaru0\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