Laravel - 用户表,制作 id uuid 类型

标签 laravel laravel-5 factory uuid laravel-5.8

1-用户表,使id为uuid类型。

没问题

php artisan migrate:refresh

但是这个错误

php artisan db:seed

错误:(“SQLSTATE[HY000]:一般错误:1364 字段‘id’没有默认值”)

2- 公司也希望随机分发给用户。在用户表中,uuid 类型将保存在 user_id 列中。

从现在开始谢谢你......

用户模型:

use UsesUuid;

protected $fillable = ['name', 'email', 'password', 'role', 'slug',];

protected $hidden = ['password', 'remember_token',];

protected $casts = ['email_verified_at' => 'datetime',];

public function companies()
{
    return $this->hasMany('App\Company', 'user_id', 'id');
}

使用 Uuid 特征:

protected static function boot()
{
    parent::boot();

    static::creating(function ($post) {
        $post->{$post->getKeyName()} = (string)Str::uuid();
    });
}

public $incrementing = false;

public function getKeyType()
{
    return 'string';
}

用户迁移:

Schema::create('users', function (Blueprint $table) {
        $table->uuid('id')->primary()->unique();
        $table->string('name',100);
        $table->string('email',100);
        $table->timestamp('email_verified_at')->nullable();
        $table->string('password',100);
        $table->string('role',20)->nullable();
        $table->string('slug',100);
        $table->rememberToken();
        $table->timestamps();
        $table->softDeletes();
    });

公司迁移:

Schema::create('companies', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('user_id',36);
$table->string('name', 100);

$table->timestamps();
$table->softDeletes();

$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');  

});

用户工厂:

$name = $faker->name;
return [
    'id' => Str::uuid(),
    'name' => $name,
    'email' => $faker->unique()->safeEmail,
    'email_verified_at' => now(),
    'password' => Hash::make(123), // password
    'remember_token' => Str::random(10),
    'role' => 'user',
    'slug' => Str::slug($name),
];

公司工厂:

$name = $faker->company;
return [
    'user_id' => Str::uuid(),
    'name' => $name,
];

数据库播种器:

factory(App\User::class, 5)->create();
factory(App\Company::class, 1500)->create();

最佳答案

像这样修改你的特质:

static::creating(function ($post) {
    empty($post->{$post->getKeyName()}) && $post->{$post->getKeyName()} = (string)Str::uuid();
});

没有必要让UUID唯一, 在您的迁移中,因为它已经存在!

$table->uuid('id');
$table->primary('id');

工厂必须自己创建主UUID,不要自己添加

我认为通过这些更改,seeder 必须成功运行

关于Laravel - 用户表,制作 id uuid 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57390513/

相关文章:

PHP 服务器在本应报告错误时超时

php - 在 Laravel 中验证数组

php - Composer : file_put_contents(./composer.json):无法打开流:权限被拒绝

c++ - 抽象工厂模式客户端代码

如果字段不等于,则需要 Laravel 验证

laravel - 如何在 Laravel 5 中使用 ftp?

Laravel 5.0- Blade 模板错误

php - 属性存在但 property_exists() 返回 false;

dart - 如何在 Flutter 中创建基工厂并在子类上覆盖它

java - 将参数传递给枚举抽象方法