Создайте папку в app
с именем Traits
.Там создайте файл Uuids.php
.
Добавьте следующий код в Uuids.php
;
<?php
namespace YourNamespace;
use Illuminate\Support\Str;
trait Uuids
{
/**
* Boot function from Laravel
*/
protected static function boot()
{
parent::boot();
static::creating(function ($model) {
$model->incrementing = false;
$model->{$model->getKeyName()} = Str::uuid()->toString();
});
}
}
Тогда в вашем файле миграции у вас должно быть что-то вроде:
$table->uuid('id')->primary();
для замены $table->increments('id');
Не забудьте использовать черту Uuids, как в своих моделях;
<?php
namespace YourNamespace;
use Illuminate\Database\Eloquent\Model;
class Category extends Model
{
use Uuids;
protected $guarded = [''];
protected $casts = [
'id' => 'string',
];
...
Перед изменением столбца обязательно добавьтеdoctrine/dbal
зависимость от вашего файла composer.json.Библиотека Doctrine DBAL используется для определения текущего состояния столбца и создания запросов SQL, необходимых для внесения указанных изменений в столбец:
composer require doctrine/dbal
Далее вы создаете файл миграции;
php artisan make:migration change_primary_key_type_in_roles_table --table=roles
затем в вашем файле миграции.Вы делаете это, например.
public function up()
{
Schema::table('roles', function (Blueprint $table) {
$table->uuid('id')->change();
});
}
public function down()
{
Schema::table('roles', function (Blueprint $table) {
$table->increments('id')->change();
});
}
Не забудьте сделать composer dumpautoload
.
Надеюсь, это поможет.
ОБНОВЛЕНИЕ: Я написал сообщение в блоге о том, как этого добиться здесь