Laravelでfakerを利用し、Eloquentのcursor()・all()・chunk()の速度を計測するために、テストの点数のデータを登録してみた(第1回)
◆目的
最終的に、laravelのeloquentのcursor()・all()・chunk()の速度を計測する
今回:テストの点数データの登録まで
◆model・migrationファイル作成
まず、テーブルを作成する。
php artisan make:model Models/Student -m
class CreateStudentsTable extends Migration
{
public function up()
{
Schema::create('students', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name', 20)->comment('名前');
$table->bigInteger('japanese')->comment('国語');
$table->bigInteger('math')->comment('数学');
$table->bigInteger('english')->comment('英語');
$table->bigInteger('social_studies')->comment('社会');
$table->bigInteger('science')->comment('理科');
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('students');
}
}
名前とご科目の点数を入れるカラムを用意した。
php artisan migrate
Migrating: 2019_04_07_085555_create_students_table
Migrated: 2019_04_07_085555_create_students_table
テーブル作成完了
class Student extends Model
{
//明示的にテーブルと紐づけ(記載しない場合、Model名の複数形のテーブルと紐づく(今回ならstudents))
protected $table = 'students';
//複数代入に代入を許可しないカラム(主キーなどを設定する)
protected $guarded = ['id'];
//データが入ったときに自動でcreated_atとupdate_atにデータが入ることを明示的に表示
public $timestamps = true;
//複数代入時に代入を許可するカラム
protected $fillable = ['name', 'japanese', 'math', 'english', 'social_studies', 'science'];
}
設定完了
◆factory・fakerの利用
今回は、速度計測が最終目標のため、一つ一つデータを入れず、factory・fakerを使って、ランダムなデータを大量に入れていきたいと思う。
faker:ダミーデータの作成
factory:DBにレコードを登録するときの便利クラス
//ファクトリークラスの作成
php artisan make:factory StudentFactory
$factory->define(Student::class, function (Faker $faker) {
return [
'name' => $faker->name,
'japanese' => $faker->numberBetween(0, 100),
'math' => $faker->numberBetween(0, 100),
'english' => $faker->numberBetween(0, 100),
'social_studies' => $faker->numberBetween(0, 100),
'science' => $faker->numberBetween(0, 100),
];
});
名前はランダムで、点数は0~100点をランダムで生成してもらうことにした。
[fakerで設定できるもの]https://qiita.com/tosite0345/items/1d47961947a6770053af
名前を日本語で登録してもらうために、
'faker_locale' => env('APP_FAKER_LOCALE', 'en_US'),
APP_FAKER_LOCALE=ja_JP
//設定変えたので、キャッシュクリア
php artisan config:cache
[日本語設定]
https://qiita.com/shima_6_you/items/83af3b9fe79387d82286
データ登録用にSeederファイルを作成する
php artisan make:seed StudentsTableSeeder
class StudentsTableSeeder extends Seeder
{
public function run()
{
factory(Student::class, 10000)->create();
}
}
ファクトリーメソッドで、10000件登録する。
class DatabaseSeeder extends Seeder
{
public function run()
{
$this->call(StudentsTableSeeder::class);
}
}
実行するSeederファイルを加えて、コマンドでデータを入れてみる。
php artisan db:seed
Seeding: StudentsTableSeeder
Database seeding completed successfully
10000件登録完了
◆まとめ
長くなりそうなので、今回はfacker・factoryを利用して、データの登録までを行った。
次回以降、all()・chunck()・cursor()の速度を図りたいと思う。
Author And Source
この問題について(Laravelでfakerを利用し、Eloquentのcursor()・all()・chunk()の速度を計測するために、テストの点数のデータを登録してみた(第1回)), 我々は、より多くの情報をここで見つけました https://qiita.com/shibaHaya/items/ef66918558d2a8c34ad7著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .