LaravelでMySQLに接続し、テーブルを作成。そしてシーダーという仕組みを使って自動的にテストデータを入力してみます。プログラムの学習のときはテストデータが必要となる場合が多いので、この機能を習得しておくと今後のプログラム開発に役立ちます。
envファイルにMySQL接続データを登録
Laravelのプロジェクトルートの.envファイルにMySQLの接続情報を設定します。
APP_NAME=Laravel APP_ENV=local APP_KEY=base64:cLc3AoXP7geasZQqFai40s39AagW0pK1jbYRNoQ= APP_DEBUG=true APP_URL=http://example.com LOG_CHANNEL=stack DB_CONNECTION=mysql DB_HOST=xxx.xxx.xxx.xxx DB_PORT=3306 DB_DATABASE=sample DB_USERNAME=sample DB_PASSWORD=xxxxxxxxxx
変更するのは
DB_CONNECTION → mysql
DB_HOST → サーバーのIPアドレス
DB_DATABASE → 任意のDB名
DB_USERNAME → 任意のMySQLユーザー名
DB_PASSWORD → 任意のパスワード
になります。
tableの作成
artisan make:migrationでtableを作成します。
テーブル名は「members」とします。
php artisan make:migration create_members_table
create_テーブル名(複数名)_tableという記述になります。
コンソールに「Created Migration: 2020_04_12_062956_create_members_table」という形式のメッセージが出ます。
プロジェクトのdatabase > migrationsの中にファイルが生成されているのでこれを開いて編集します。
ファイルパス「 /database/migrations/2020_04_12_062956_create_members_table」
<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class CreateMembersTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('members', function (Blueprint $table) { $table->id(); $table->string('name'); //追加 $table->string('email'); //追加 $table->string('tel'); //追加 $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('members'); } }
以下のようなメッセージが出力されます。
Migrating: 2020_04_12_062956_create_members_table
Migrated: 2020_04_12_062956_create_members_table (0.01 seconds)
これで成功しています。
phpMyAdminでtableが生成されているか確認してみます。
membersテーブルが作られ、指定したカラムも作られています。
Modelの作成
artisanを使ってモデルを作成します。
Laravelのプロジェクトディレクトリで以下のコマンドを実行します。
# php artisan make:model Member
Laravelではテーブル名は複数形、Modelは単数形になっています。
membersテーブルなのでモデルはMemberとなります。
実行すると「Model created successfully.」という緑のメッセージが表示されます。
プロジェクトディレクトリのappの中にMmber.phpというモデルファイルが作られます。
シーダー
シーダーとはサンプルデーターを自動に生成する仕組みです。レコード数の多いデーター、テーブルが多いシステムなどではサンプルデータを作るだけでも大変です。シーダーを使うと簡単にサンプルデータが作れてしまうので便利です。このような機能があるのもフレームワークの良いところです。
シーダーファイルを作るには以下のコマンドを実行します。
# php artisan make:seeder MembersTableSeeder
こちらはMembersと複数形になっていることに注意しましょう。
実行すると「Model created successfully.」という緑のメッセージが表示されます。
database > seedsにファイルが生成されています。
「MembersTableSeeder.php」というファイルが作られていました。
以下のように記載します。
<?php use Illuminate\Database\Seeder; class MembersTableSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { DB::table('members')->delete(); $faker = Faker\Factory::create('ja_JP'); for ($i = 0; $i < 10; $i++) { \App\Member::create([ 'name' => $faker->name(), 'email' => $faker->email(), 'tel' => $faker->phoneNumber() ]); } } }
function run()の中身は空になっています。
DB::table(‘members’)->delete(); → データを消去
$faker = Faker\Factory::create(‘ja_JP’); → 日本語の設定
for文で10回の繰り返し(10件のデータを登録)
それぞれのフィールドに自動生成する値を設定。
$faker ->name(); の形式で入力する。
fakerのプロパティは下記が参考になります。
ファイルが完成したら、保存します。
生成されるデータ
かなり現実的なデーターが生成されます。
メールアドレスとか電話番号は適当に作っているのだろうけれど、実在しているデータと一致してしまうこともありそうな・・・一応ボカしておきました(笑)
この機能は便利ですね。今まではある程度のパターンのテストデータを用意していましたが、もう用意する必要無しという感じです。
コマンドのまとめ
テーブルの作成からシーダーの実行までの一連のコマンドをまとめておきます。
# php artisan make:migration create_members_table # php arisan migrate # php artisan make:model Member # php artisan make:seeder MembersTableSeeder # php artisan db:seed --class=MembersTableSeeder