fix: query optimization

 166 Queries -> 2 Queries (cached)
This commit is contained in:
Rico van Zelst
2023-11-07 22:04:00 +01:00
parent 04602efece
commit d17d19bac6
7 changed files with 38 additions and 22 deletions

View File

@@ -0,0 +1,14 @@
<?php
function getRoleIcon($roleName)
{
$roleIcons = [
'Toplane' => 'gm-top.png',
'Jungle' => 'gm-jungle.png',
'Midlane' => 'gm-mid.png',
'Botlane' => 'gm-bot.png',
'Support' => 'gm-support.png',
];
return asset('img/' . $roleIcons[$roleName]);
}

View File

@@ -5,6 +5,8 @@ namespace App\Http\Controllers;
use App\Http\Requests\StoreChampionRequest; use App\Http\Requests\StoreChampionRequest;
use App\Http\Requests\UpdateChampionRequest; use App\Http\Requests\UpdateChampionRequest;
use App\Models\Champion; use App\Models\Champion;
use App\Models\ChampionRoles;
use Illuminate\Support\Facades\Cache;
class ChampionController extends Controller class ChampionController extends Controller
{ {
@@ -13,9 +15,15 @@ class ChampionController extends Controller
*/ */
public function index() public function index()
{ {
$champions = Champion::orderBy('name')->get(); $champions = Cache::remember('championsListAllCache', 60 * 60 * 8, function () {
return Champion::orderBy('name')->get();
});
return view('champions.index', compact('champions')); $roles = Cache::remember('championsRolesCache', 60 * 60 * 8, function () {
return ChampionRoles::orderBy('champion_name')->get();
});
return view('champions.index', compact('champions', 'roles'));
} }
/** /**

View File

@@ -47,17 +47,4 @@ class ChampionRoles extends Model
return $transformedRoles; return $transformedRoles;
} }
public function getRoleIcon($roleName)
{
$roleIcons = [
'Toplane' => 'gm-top.png',
'Jungle' => 'gm-jungle.png',
'Midlane' => 'gm-mid.png',
'Botlane' => 'gm-bot.png',
'Support' => 'gm-support.png',
];
return asset('img/' . $roleIcons[$roleName]);
}
} }

View File

@@ -7,7 +7,7 @@ use Illuminate\View\Component;
class List_all extends Component class List_all extends Component
{ {
public function __construct(public array $champions) public function __construct(public array $champions, public array $roles)
{ {
} }

View File

@@ -2,7 +2,10 @@
"name": "laravel/laravel", "name": "laravel/laravel",
"type": "project", "type": "project",
"description": "The skeleton application for the Laravel framework.", "description": "The skeleton application for the Laravel framework.",
"keywords": ["laravel", "framework"], "keywords": [
"laravel",
"framework"
],
"license": "MIT", "license": "MIT",
"require": { "require": {
"php": "^8.1", "php": "^8.1",
@@ -33,7 +36,10 @@
"App\\": "app/", "App\\": "app/",
"Database\\Factories\\": "database/factories/", "Database\\Factories\\": "database/factories/",
"Database\\Seeders\\": "database/seeders/" "Database\\Seeders\\": "database/seeders/"
} },
"files": [
"app/Helpers/HelperFunctions.php"
]
}, },
"autoload-dev": { "autoload-dev": {
"psr-4": { "psr-4": {

View File

@@ -46,7 +46,7 @@
<body class="antialiased bg-stone-900 dark"> <body class="antialiased bg-stone-900 dark">
<x-navbar/> <x-navbar/>
<x-champions.list_all :champions="$champions"/> <x-champions.list_all :champions="$champions" :roles="$roles"/>
</body> </body>

View File

@@ -1,7 +1,8 @@
<?php <?php
/** @var App\Models\Champion $champion */ /** @var App\Models\Champion $champion */
/** @var App\Models\ChampionRoles $lanes */ ?> /** @var App\Models\ChampionRole $roles */
?>
<section class="max-w-screen-xl mx-auto mt-12"> <section class="max-w-screen-xl mx-auto mt-12">
@@ -36,13 +37,13 @@
<div class="flex items-center justify-between mt-2"> <div class="flex items-center justify-between mt-2">
<p class="text-gray-300 text-sm flex"> <p class="text-gray-300 text-sm flex">
@foreach($champion->lanes->roles as $lane) @foreach($roles[$key]->roles as $lane)
<span class="sr-only">{{$lane}}</span> <span class="sr-only">{{$lane}}</span>
<img data-tooltip-target="tooltip-bottom-{{$lane}}" <img data-tooltip-target="tooltip-bottom-{{$lane}}"
data-tooltip-placement="bottom" data-tooltip-placement="bottom"
@if($key < 8) loading="auto" @else loading="lazy" @if($key < 8) loading="auto" @else loading="lazy"
@endif src="{{$champion->lanes->getRoleIcon($lane)}}" @endif src="{{getRoleIcon($lane)}}"
alt="{{$lane}} Icon" alt="{{$lane}} Icon"
class="w-7 h-7 mr-1"> class="w-7 h-7 mr-1">
</p> </p>