Skip to content

Instantly share code, notes, and snippets.

@vmrfriz
Created May 29, 2023 08:01
Show Gist options
  • Save vmrfriz/4e48a414ea2299c52e11a857fa390a8d to your computer and use it in GitHub Desktop.
Save vmrfriz/4e48a414ea2299c52e11a857fa390a8d to your computer and use it in GitHub Desktop.
Laravel toSql with parameters
<?php
// File app/Providers/AppServiceProvider.php
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
function boot(): void
{
Schema::defaultStringLength(191);
\Illuminate\Database\Query\Builder::macro('dumpSql', function () {
$bindings = $this->getBindings();
$sql = str_replace('?', '%s', $this->toSql());
$sql = sprintf($sql, ...$bindings);
dump($sql);
});
}
/**
* Register any application services.
*
* @return void
*/
public function register(): void
{
//
}
}
@vmrfriz
Copy link
Author

vmrfriz commented May 29, 2023

Когда $builder->toSql() недостаточно, на помощь приходит метод $builder->dumpSql(), который для начала нужно объявить в AppServiceProvider (или другом сервис провайдере).

$records = Order::query()
    ->select('user_id')
    ->whereBetween('created_at', [
        date('2023-01-01'),
        date('2023-02-01')
    ])
    ->groupBy('user_id')
    ->orderBy('user_id')
    ->dumpSql() // <-- выведет dump() запроса
    ->pluck('user_id')
    ->toArray();

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment