laravel 技巧

  1. 1. 快速找到 facade 中对应的类
  2. 2. 将数据表里的数据导出成 Seeder 文件
  3. 3. 建议 使用模型工厂来填充数据
    1. 3.1. 模型工厂
    2. 3.2. 传统方式
  4. 4.

快速找到 facade 中对应的类

1
2
3
Route::get('test', function(){
dd(get_class(HTML::getFacadeRoot()));
});

或者使用 idehelper

将数据表里的数据导出成 Seeder 文件

  1. composer require orangehill/iseed
  2. 在 config/app.php 文件中添加 Service Provider
  3. php artisan iseed 后面带上本地数据表的名称, 可直接将数据库表的内容转换为 seeder 文件
  4. 强制覆盖导出文件 – force

建议 使用模型工厂来填充数据

模型工厂

避免

1
factory(\App\Models\User::class)->times(300)->create();

正确的做法:使用 make 方法

1
2
$users = factory(\App\Models\User::class)->times(1000)->make();
\App\Models\User::insert($users->toArray());

传统方式

避免

1
2
3
4
5
6
7
8
9
10
11
$faker = Faker::create();
$users = User::lists('id');
foreach (range(1, 1000) as $index)
{
Topic::create([
'user_id' => $faker->randomElement($users),
'title' => $faker->sentence(),
'description' => $faker->text(),
]);
}

解决方案,使用 DB:insert

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$faker = Faker::create();
$users = User::lists('id');
$datas = [];
foreach (range(1, 1000) as $index)
{
$datas[] = [
'user_id' => $faker->randomElement($users),
'title' => $faker->sentence(),
'description' => $faker->text(),
'created_at' => Carbon::now()->toDateTimeString(),
'updated_at' => Carbon::now()->toDateTimeString(),
];
}
DB::table('topics')->insert($datas);

如果通过 PECL 安装 Redis PHP 扩展,则需要重命名 config/app.php 文件里的 Redis 别名。