我刚开始学习laravel
。我熟悉CakePHP
。
我曾经在我的数据库和CakePHP中使用UUID
字段作为主键,将列字段的数据类型更改为CHAR(36)
非常简单,而且效果很好。
在Laravel中,我修改了users
迁移,将increments
更改为uuid
字段并设置为primary key
CreateUserTable
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->uuid('id');
$table->primary('id');
$table->string('name');
$table->string('email')->unique();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
Schema::table('users', function (Blueprint $table) {
$table->string('first_name')->nullable();
$table->string('last_name')->nullable();
$table->uuid('role_id');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('users');
}
}
但是,当我保存新记录时,它会给出错误
Illuminate\Database\QueryException thrown with message
"SQLSTATE[HY000]: General error: 1364 Field 'id' doesn't have a default value
(SQL: insert into `users` (`name`, `email`, `password`, `updated_at`, `created_at`)
values (Anuj, anuj@example.com, password_hash, date-time, date-time))"
答案 0 :(得分:3)
您还需要生成UUID - 与自动递增无符号整数键不同,UUID字段不仅仅填充自身。
一个流行且非常简单易用的软件包是alsofronie / eloquent-uuid,可在此处找到:Python 3.5.4 documentation
答案 1 :(得分:0)
我为此所做的是为使用 UUID 的模型创建一个 Trait:
trait WithUuid
{
public static function boot()
{
parent::boot();
self::creating(function ($model) {
$model->{$model->getKeyName()} = (string) Uuid::generate(4);
});
}
public function initializeHasUuid()
{
$this->incrementing = false;
$this->keyType = 'string';
}
}
然后在您的模型上声明 Trait:
class User extends Model
{
use WithUuid;
// rest of your Code
}
因此您不必每次创建内容时都创建一个新的。