From 17c7f0f9f82a0b8fda922ef229c2315e43b39ef0 Mon Sep 17 00:00:00 2001 From: vine_liutk <961510893@qq.com> Date: Fri, 8 Dec 2023 12:25:14 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=95=B0=E6=8D=AE=E5=AD=97?= =?UTF-8?q?=E5=85=B8=E6=90=9C=E7=B4=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Models/Filters/KeywordFilter.php | 17 +++++ app/Providers/QueryLoggerServiceProvider.php | 67 ++++++++++++++++++++ app/Services/Admin/BaseService.php | 5 +- app/Services/Admin/KeywordService.php | 9 +++ config/app.php | 2 + 5 files changed, 98 insertions(+), 2 deletions(-) create mode 100644 app/Models/Filters/KeywordFilter.php create mode 100644 app/Providers/QueryLoggerServiceProvider.php diff --git a/app/Models/Filters/KeywordFilter.php b/app/Models/Filters/KeywordFilter.php new file mode 100644 index 0000000..c773455 --- /dev/null +++ b/app/Models/Filters/KeywordFilter.php @@ -0,0 +1,17 @@ +where('name','like', '%'.$name.'%') + ->orWhere('key','like', '%'.$name.'%'); + } +} diff --git a/app/Providers/QueryLoggerServiceProvider.php b/app/Providers/QueryLoggerServiceProvider.php new file mode 100644 index 0000000..f7c1c0a --- /dev/null +++ b/app/Providers/QueryLoggerServiceProvider.php @@ -0,0 +1,67 @@ +app['events']->listen([ + QueryExecuted::class, + TransactionBeginning::class, + TransactionCommitted::class, + TransactionRolledBack::class, + ], function ($event) { + Log::debug(match (true) { + $event instanceof TransactionBeginning => 'begin transaction', + $event instanceof TransactionCommitted => 'commit transaction', + $event instanceof TransactionRolledBack => 'rollback transaction', + default => $this->prepareSql($event), + }); + }); + } + + /** + * @param \Illuminate\Database\Events\QueryExecuted $query + * @return string + */ + protected function prepareSql(QueryExecuted $query): string + { + $sql = str_replace(['%', '?'], ['%%', '%s'], $query->sql); + + $bindings = $query->connection->prepareBindings($query->bindings); + + if (count($bindings)) { + $sql = vsprintf($sql, array_map([$query->connection->getPdo(), 'quote'], $bindings)); + } + + return sprintf('[%s] %s', $this->formatDuration($query->time), $sql); + } + + /** + * @param float $milliseconds + * @return string + */ + protected function formatDuration($milliseconds): string + { + return match (true) { + $milliseconds >= 1000 => round($milliseconds / 1000, 2).'s', + $milliseconds < 0.01 => round($milliseconds * 1000).'μs', + default => $milliseconds.'ms', + }; + } +} diff --git a/app/Services/Admin/BaseService.php b/app/Services/Admin/BaseService.php index 92665ed..a9ec1eb 100644 --- a/app/Services/Admin/BaseService.php +++ b/app/Services/Admin/BaseService.php @@ -16,8 +16,9 @@ class BaseService extends AdminService public function getTree() { - $list = $this->query()->orderByDesc('sort')->get()->toArray(); - return array2tree($list); + $list = $this->query()->orderByDesc('sort')->get(); + $minNum = $list->min('parent_id'); + return array2tree($list->toArray(), $minNum); } public function getModelFilter() diff --git a/app/Services/Admin/KeywordService.php b/app/Services/Admin/KeywordService.php index d0829c6..5143832 100644 --- a/app/Services/Admin/KeywordService.php +++ b/app/Services/Admin/KeywordService.php @@ -4,6 +4,7 @@ namespace App\Services\Admin; use Illuminate\Support\Arr; use App\Models\Keyword; +use App\Models\Filters\KeywordFilter; /** * @method Keyword getModel() @@ -12,6 +13,14 @@ use App\Models\Keyword; class KeywordService extends BaseService { protected string $modelName = Keyword::class; + protected string $modelFilterName = KeywordFilter::class; + + public function getTree() + { + $list = $this->query()->filter(request()->all(), $this->modelFilterName)->orderByDesc('sort')->get(); + $minNum = $list->min('parent_id'); + return array2tree($list->toArray(), $minNum); + } public function parentIsChild($id, $pid): bool { diff --git a/config/app.php b/config/app.php index d99cd37..c832441 100644 --- a/config/app.php +++ b/config/app.php @@ -168,6 +168,8 @@ return [ // App\Providers\BroadcastServiceProvider::class, App\Providers\EventServiceProvider::class, App\Providers\RouteServiceProvider::class, + + App\Providers\QueryLoggerServiceProvider::class, ])->toArray(), /*