Laravel 5.7: MySQLを利用する最短手順
実務と勉強を兼ねてわかったことを書く備忘録シリーズ。今回はLaravelでMySQLを利用するための最短手順を書く。
前提
前回の記事等でLaravelのセットアップ済みなことが前提。
開発・検証環境
やるべきこと
MySQLをLaravelで使えるようにするには最短で以下の手順が必要。若干やることが多い。
env設定
DBの接続先を指定する。ルートディレクトリ配下.envファイルのDB_CONNECTION=mysql
以下を用意したDB設定値に書き換える。
DB_CONNECTION=mysql DB_HOST=localhost #DBのホスト名 DB_PORT=0000 #DBのport DB_DATABASE=DB #DB名 DB_USERNAME=xxxx #DBのユーザ名 DB_PASSWORD=xxxx #DBのパスワード
MAMP経由でMySQLを繋ぐ場合(オプション)
MySQLをMAMP経由で接続する場合はconfig/database.php
にMAMPのunix_socket
を設定する必要がある。詳しくは以下の記事に記述されている。
マイグレーション
マイグレーションとは、データベースの追加や変更などのバージョンを管理する機能のこと。DBを使うには、まずマイグレーションファイルの作成(DB定義ファイル作成)を行なう必要がある。
$ php artisan make:migration {{ マイグレーションファイル名 }}
例えばマイグレーションファイル名をcreate_samples_table
とすると、database/migrations/
配下にyyyy_mm_dd_hhmmss_create_samples_table.php
(yyyyとかは作成日付)というファイル名で作成される。
作成後、yyyy_mm_dd_hhmmss_create_samples_table.php
を開き、Schema内のコードに設定したいレコード値を指定する。
~省略~ public function up() { Schema::create('samples', function (Blueprint $table) { $table->increments('id'); $table->string('title'); $table->string('body'); $table->string('username'); $table->timestamps(); }); }
設定が終わったら、migrate
コマンドを実行してenvで接続済みのDBサーバ内にTableを作成する。
php artisan migrate
シーディング(オプション)
Laravelに用意されているシーディングクラスを使うことで、データベースへ初期データを簡単に投入できる。この作業はオプションだが、毎回の初期構築の手間を省けるのでオススメ。
$ php artisan make:seeder SamplesTableSeeder
実行するとdatabase/seeds/
配下にSeederファイルが生成される。何も書かれていないpublic function run()
内に以下コードを記述する。
<?php use Illuminate\Database\Seeder; class SamplesTableSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { DB::table('samples')->truncate(); // 全レコードを削除、自動増分のIDを0にリセット DB::table('samples')->insert([ // テーブルにデータをInsert 'title' => 'TestA', 'body' => 'TestA Body.', 'username' => 'userA', 'created_at' => '2019-01-01 14:00:00', 'updated_at' => '2019-01-01 14:00:00', ]//以下省略 ]); } }
シーダクラスをコールするための設定
artisanコマンド実行時にシーダークラスを呼び出すためにdatabase/seeds/DatabaseSeeder.php
のrun()
内にcallを追記。
<?php use Illuminate\Database\Seeder; use Illuminate\Database\Eloquent\Model; class DatabaseSeeder extends Seeder { /** * Seed the application's database. * * @return void */ public function run() { $this->call('SamplesTableSeeder'); } }
※他記事でSeeder内で書かれているModel:unguard
ってなに?と思ったので調べたらStackOverflowの記事にはすべてのModelプロパティにSeedできると書かれていた。
シーディング実行
db:seedコマンドを実行すると指定DBにデータがインサートされる。実行完了後に確認してInsertされていれば完了。
$ php artisan db:seed
Model作成
当たり前だがLaravelのview上で直接DBの値を編集するのはお勧めできないので、お作法に則りまずはModel と Controllerを作成する。
$ php artisan make:model Sample
app/Sample.php
というModelファイルが生成される。
Modelを定義することでDBを操作できるようになるが、予期しない代入を防ぐために$fillable
か$guarded
値を設定する必要がある。Eloquent ORMによるデータ実装に必要だが、説明が肥大化しそうなので、ここでは詳しい説明を省く。知りたい場合は参考の公式ドキュメントを参照すべし。
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Sample extends Model { protected $fillable = ['title', 'body', 'username']; // 複数代入時に代入を許可する属性を配列で設定 }
参考
Controller作成
viewにModelの値を渡すためのControllerを作成する。以下のコマンドを実行するとHttp/Controllers/
内にSampleController.php
というControllerファイルが生成される。
php artisan make:controller SampleController
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; // 追加 use App\Sample; // 定義したModelを追加 class SamplesController extends Controller { public function index () { $sample_array = Sample::all()->toArray(); // Collection操作して配列に変更 return view('index', compact('sample_array')); // compact関数を通して配列をviewに渡す } }
参考
Viewの編集
受け取ったデータ(配列)をblade上で表示するためにはbladeの繰り返し用ディレクティブを使って表示する。
@foreach($sample_array as $sample) <div>{{{ $sample['title'] }}}</div> @endforeach
参考
Route設定
最後にRoute設定。route/web.php
上にRoute::get()
を新規で設定。Controllerを通してViewを返す処理にする。@
を付けてindexを書くと、SamplesControllerのindex()
が実行できる。指定のURLでViewが確認できれば作業完了。
Route::get('/', 'SamplesController@index');