FleetCart/Modules/Support/Eloquent/Sluggable.php

59 lines
1.2 KiB
PHP
Raw Permalink Normal View History

2023-06-11 12:14:03 +00:00
<?php
namespace Modules\Support\Eloquent;
use Illuminate\Database\Eloquent\SoftDeletes;
trait Sluggable
{
/**
* Boot the trait.
*
* @return void
*/
public static function bootSluggable()
{
static::creating(function ($entity) {
$entity->setSlug();
});
}
/**
* Set the slug attribute.
*
* @param string $value
* @return void
*/
public function setSlug($value = null)
{
if (is_null($value)) {
$value = $this->getAttribute($this->slugAttribute);
}
$this->attributes['slug'] = $this->generateSlug($value);
}
/**
* Generate slug by the given value.
*
* @param string $value
* @return string
*/
private function generateSlug($value)
{
$slug = str_slug($value) ?: slugify($value);
$query = $this->where('slug', $slug)->withoutGlobalScope('active');
if (array_has(class_uses($this), SoftDeletes::class)) {
$query->withTrashed();
}
if ($query->exists()) {
$slug .= '-' . str_random(8);
}
return $slug;
}
}