为了测试, 我们需要写入一些用户信息。
生数据前奏
为了方便数据的丰满性,这里给用户增加了昵称,性别,头像,签名等字段,更新后的迁移数据是这样的。
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 的登录以及用户信息展示的对接了。