관리-도구
편집 파일: HasTranslatableSlug.php
<?php namespace App\Models\Traits; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Builder; trait HasTranslatableSlug { public function scopeWhereSlug(Builder $scope, string $slug) { return $scope->where("slug->{$this->getLocale()}", $slug); } public static function bootHasTranslatableSlug() { static::saving(function (Model $model) { collect($model->getTranslatedLocales($model->sluggable)) ->each(function (string $locale) use ($model) { $model->setTranslation('slug', $locale, $model->generateSlug($model->getTranslation($model->sluggable, $locale), $locale) ); }); }); } public function generateSlug($source, $locale = null) { // Generate slug $slug = str_slug($source); // Check if existing for current locale $existingSlug = (bool) $this->where("slug->$locale", $slug) ->where($this->getKeyName(), '!=', $this->getKey()) ->withoutGlobalScopes() ->first(); // Add unique key if existing slug if ($existingSlug) { return "$slug-{$this->getKey()}"; } return $slug; } }