Viewing file: HasUlids.php (2.35 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
namespace Illuminate\Database\Eloquent\Concerns;
use Illuminate\Database\Eloquent\ModelNotFoundException; use Illuminate\Support\Str;
trait HasUlids { /** * Boot the trait. * * @return void */ public static function bootHasUlids() { static::creating(function (self $model) { foreach ($model->uniqueIds() as $column) { if (empty($model->{$column})) { $model->{$column} = $model->newUniqueId(); } } }); }
/** * Generate a new ULID for the model. * * @return string */ public function newUniqueId() { return strtolower((string) Str::ulid()); }
/** * Retrieve the model for a bound value. * * @param \Illuminate\Database\Eloquent\Model|\Illuminate\Database\Eloquent\Relations\Relation $query * @param mixed $value * @param string|null $field * @return \Illuminate\Database\Eloquent\Relations\Relation * * @throws \Illuminate\Database\Eloquent\ModelNotFoundException */ public function resolveRouteBindingQuery($query, $value, $field = null) { if ($field && in_array($field, $this->uniqueIds()) && ! Str::isUlid($value)) { throw (new ModelNotFoundException)->setModel(get_class($this), $value); }
if (! $field && in_array($this->getRouteKeyName(), $this->uniqueIds()) && ! Str::isUlid($value)) { throw (new ModelNotFoundException)->setModel(get_class($this), $value); }
return parent::resolveRouteBindingQuery($query, $value, $field); }
/** * Get the columns that should receive a unique identifier. * * @return array */ public function uniqueIds() { return [$this->getKeyName()]; }
/** * Get the auto-incrementing key type. * * @return string */ public function getKeyType() { if (in_array($this->getKeyName(), $this->uniqueIds())) { return 'string'; }
return $this->keyType; }
/** * Get the value indicating whether the IDs are incrementing. * * @return bool */ public function getIncrementing() { if (in_array($this->getKeyName(), $this->uniqueIds())) { return false; }
return $this->incrementing; } }
|