Файл: vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasUlids.php
Строк: 108
<?php
namespace IlluminateDatabaseEloquentConcerns;
use IlluminateDatabaseEloquentModelNotFoundException;
use IlluminateSupportStr;
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 IlluminateDatabaseEloquentModel|IlluminateDatabaseEloquentRelationsRelation $query
* @param mixed $value
* @param string|null $field
* @return IlluminateDatabaseEloquentRelationsRelation
*
* @throws IlluminateDatabaseEloquentModelNotFoundException
*/
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;
}
}