Write the Code. Change the World.

9月 16

为了测试, 我们需要写入一些用户信息。

生数据前奏

为了方便数据的丰满性,这里给用户增加了昵称,性别,头像,签名等字段,更新后的迁移数据是这样的。

        Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->string('account')->unique();
            $table->string('password');
            $table->string('nickname', 32)->comment('昵称');
            $table->unsignedTinyInteger('gender')->default(3)->comment('性别 1 男 2 女 3 未知');
            $table->string('avatar', 128)->nullable();
            $table->string('email')->unique();
            $table->string('signature')->nullable();
            $table->rememberToken();
            $table->timestamp('email_verified_at')->nullable();
            $table->timestamps();
        });

这里将 name 改成 account 了,email 后移了。使用 account 和 password 登录。而非 email。当然,account 你可以和 email 的数据一样。我个人喜好用手机作为 account。

模型白名单更改:

    protected $fillable = [
        'account', 'password', 'nickname', 'gender', 'avatar', 'email',  'signature'
    ];

生成数据

可以先了解 faker。

https://github.com/fzaninotto/Faker

https://www.jianshu.com/p/6576144f73fc

在测试阶段,使用 seeder 来生是非常方便的。在使用 seeder 之前,先定义好 UserFactory,它在 database/factories/ 下,修改成:

    public function definition()
    {
        return [
            'account' => $this->faker->unique()->phoneNumber,
            'password' => Hash::make('123456'), 
            'nickname' => $this->faker->name,
            'gender' => $this->faker->numberBetween(1, 3),
            'avatar' => $this->faker->imageUrl(256,256),
            'email' => $this->faker->unique()->safeEmail,
            'signature' => $this->faker->text(96),
            'email_verified_at' => now(),
            'remember_token' => Str::random(10),
        ];
    }

我们可以先在 tinker 里边尝试尝试。

php artisan tinker;

$faker = Faker\Factory::create('zh_CN');
$faker->name;
$faker->safeEmail;

好了,上边前奏好了,我们生一个 seeder。

php artisan make:seeder UserSeeder

# 填充 UserSeeder (生成十个用户)
<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use App\Models\User;

class UserSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        User::factory(10)->create();
    }
}

# 将该 seeder 添加到 DatabaseSeeder 里边
<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     *
     * @return void
     */
    public function run()
    {
        $this->call([
            UserSeeder::class
        ]);
    }
}

好了,下边来执行删除表并执行迁移和seeder。

php artisan migrate:fresh --seed

# 出现下边的结果,表示已生好了

Dropped all tables successfully.
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated:  2014_10_12_000000_create_users_table (147.18ms)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated:  2014_10_12_100000_create_password_resets_table (86.80ms)
Migrating: 2019_08_19_000000_create_failed_jobs_table
Migrated:  2019_08_19_000000_create_failed_jobs_table (128.32ms)
Migrating: 2019_12_14_000001_create_personal_access_tokens_table
Migrated:  2019_12_14_000001_create_personal_access_tokens_table (139.25ms)
Seeding: Database\Seeders\UserSeeder
Seeded:  Database\Seeders\UserSeeder (1,104.20ms)
Database seeding completed successfully.

# 我们来用 tinker 喵喵
php artisan tinker;
use App\Models\User;
User::limit(20)->get()->all();

# 这个时候发现只有 10 条数据,故意用 20 的。因为我们只生了10个。

上边的 seeder 很方便,也是官方的一种标准写法。可是上边生成的数据还是不够自由。比如我想生成特定的手机号码的用户呢。上边不好搞。这时,我们可以直接在 seeder 中来操作,不必去关心 factory 。

这时,我需要生成一条特定的数据,可以在 UserSeeder 中,在 run 中,增加一个独有的数据就好了。

修改 UserSeeder 如下:

<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Str;
use App\Models\User;

class UserSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        $faker = \Faker\Factory::create('zh_CN');
        $data = [
            'account' => 'xxxxxxxx',
            'password' => Hash::make('123456'),
            'nickname' => '七月羽歌',
            'gender' => 1,
            'avatar' => $faker->imageUrl(256,256),
            'email' => 'xxx@xxx.com',
            'signature' => '虚幻之物对应着冥冥之路。',
            'email_verified_at' => now(),
            'remember_token' => Str::random(10),
        ];
        User::create($data);

        User::factory(10)->create();
    }
}

好了,知道怎么会事就可以了。

最后

数据也生了,下边就开始做 vue element admin 的登录以及用户信息展示的对接了。

发表评论

电子邮件地址不会被公开。 必填项已用*标注