feat: make models sluggable

This commit is contained in:
Rico van Zelst
2023-11-01 14:04:37 +01:00
parent 34f69de9fe
commit 69c072a003
3 changed files with 43 additions and 9 deletions

View File

@@ -2,12 +2,14 @@
namespace App\Models; namespace App\Models;
use Cviebrock\EloquentSluggable\Sluggable;
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
class Champion extends Model class Champion extends Model
{ {
use HasFactory; use HasFactory;
use Sluggable;
protected $fillable = [ protected $fillable = [
'champion_id', 'champion_id',
@@ -29,6 +31,15 @@ class Champion extends Model
'roles' => 'array', 'roles' => 'array',
]; ];
public function sluggable(): array
{
return [
'slug' => [
'source' => 'name'
]
];
}
public function skins() public function skins()
{ {
return $this->hasMany(ChampionSkin::class); return $this->hasMany(ChampionSkin::class);
@@ -36,46 +47,46 @@ class Champion extends Model
public function getChampionImageAttribute() public function getChampionImageAttribute()
{ {
return 'https://cdn.communitydragon.org/latest/champion/'.$this->champion_id.'/splash-art'; return 'https://cdn.communitydragon.org/latest/champion/' . $this->champion_id . '/splash-art';
} }
public function getChampionImageLoadingAttribute() public function getChampionImageLoadingAttribute()
{ {
return 'https://cdn.communitydragon.org/latest/champion/'.$this->champion_id.'/portrait'; return 'https://cdn.communitydragon.org/latest/champion/' . $this->champion_id . '/portrait';
} }
public function getChampionImageTileAttribute() public function getChampionImageTileAttribute()
{ {
return 'https://cdn.communitydragon.org/latest/champion/'.$this->champion_id.'/tile'; return 'https://cdn.communitydragon.org/latest/champion/' . $this->champion_id . '/tile';
} }
public function getChampionSquareImageAttribute() public function getChampionSquareImageAttribute()
{ {
return 'https://cdn.communitydragon.org/latest/champion/'.$this->champion_id.'/square'; return 'https://cdn.communitydragon.org/latest/champion/' . $this->champion_id . '/square';
} }
public function getChampionAbilityIconQAttribute() public function getChampionAbilityIconQAttribute()
{ {
return 'https://cdn.communitydragon.org/latest/champion/'.$this->champion_id.'/ability-icon/q'; return 'https://cdn.communitydragon.org/latest/champion/' . $this->champion_id . '/ability-icon/q';
} }
public function getChampionAbilityIconWAttribute() public function getChampionAbilityIconWAttribute()
{ {
return 'https://cdn.communitydragon.org/latest/champion/'.$this->champion_id.'/ability-icon/w'; return 'https://cdn.communitydragon.org/latest/champion/' . $this->champion_id . '/ability-icon/w';
} }
public function getChampionAbilityIconEAttribute() public function getChampionAbilityIconEAttribute()
{ {
return 'https://cdn.communitydragon.org/latest/champion/'.$this->champion_id.'/ability-icon/e'; return 'https://cdn.communitydragon.org/latest/champion/' . $this->champion_id . '/ability-icon/e';
} }
public function getChampionAbilityIconRAttribute() public function getChampionAbilityIconRAttribute()
{ {
return 'https://cdn.communitydragon.org/latest/champion/'.$this->champion_id.'/ability-icon/r'; return 'https://cdn.communitydragon.org/latest/champion/' . $this->champion_id . '/ability-icon/r';
} }
public function getChampionAbilityIconPAttribute() public function getChampionAbilityIconPAttribute()
{ {
return 'https://cdn.communitydragon.org/latest/champion/'.$this->champion_id.'/ability-icon/p'; return 'https://cdn.communitydragon.org/latest/champion/' . $this->champion_id . '/ability-icon/p';
} }
} }

View File

@@ -2,12 +2,14 @@
namespace App\Models; namespace App\Models;
use Cviebrock\EloquentSluggable\Sluggable;
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
class ChampionSkin extends Model class ChampionSkin extends Model
{ {
use HasFactory; use HasFactory;
use Sluggable;
protected $fillable = [ protected $fillable = [
'champion_id', 'champion_id',
@@ -36,6 +38,15 @@ class ChampionSkin extends Model
'splash_artist' => 'array', 'splash_artist' => 'array',
]; ];
public function sluggable(): array
{
return [
'slug' => [
'source' => 'skin_name'
]
];
}
public function champion() public function champion()
{ {
return $this->belongsTo(Champion::class); return $this->belongsTo(Champion::class);

View File

@@ -2,12 +2,14 @@
namespace App\Models; namespace App\Models;
use Cviebrock\EloquentSluggable\Sluggable;
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
class SkinChroma extends Model class SkinChroma extends Model
{ {
use HasFactory; use HasFactory;
use Sluggable;
protected $fillable = [ protected $fillable = [
'full_skin_id', 'full_skin_id',
@@ -21,6 +23,16 @@ class SkinChroma extends Model
'chroma_colors' => 'array', 'chroma_colors' => 'array',
]; ];
public function sluggable(): array
{
$slug = $this->chroma_name . ' ' . $this->skin_name;
return [
'slug' => [
'source' => $slug
]
];
}
public function skin() public function skin()
{ {
return $this->belongsTo(Skin::class); return $this->belongsTo(Skin::class);