ローカル環境でLaravelでデータベースに接続して、データを取得してみます。
データベースの作成
今回はXAMPPでデータベースを作成してみます。
XAMPPのApacheとMySQLを起動しておきます。
phpMyAdmin(http://localhost/phpmyadmin/)でデータベースを作成します。
左メニューのNewから作成できます。
今回データベース名は「laravel_test」にしました。
Laravelのインストール
コマンドプロンプトを開いて、作業ディレクトリに移動します。
cd 作業ディレクトリ
laravel_db_testというディレクトリを作成して、その中にLaravelをインストールします。
composer create-project laravel/laravel laravel_db_test --prefer-dist
laravel_db_testへ移動します。
cd 作業ディレクトリ\laravel_db_test
.envファイルを以下のように書き換えます。
変更前
DB_DATABASE=homestead DB_USERNAME=homestead DB_PASSWORD=secret
変更後
DB_DATABASE=データベース名(今回はlaravel_test) DB_USERNAME=phpMyAdminのユーザー名(初期値はroot) DB_PASSWORD=phpMyAdminのパスワード(初期値は設定なし?)
マイグレーションの実行
マイグレーションとは、データベースの追加や変更などのバージョンを管理する機能です。
マイグレーションとはデータベースのバージョンコントロールのようなもので、チームでアプリケーションデータベースのスキーマを簡単に更新し共有できるようにしてくれます。通常、マイグレーションはアプリケーションのデータベーススキーマを簡単に構築できるようにする、Laravelのスキーマビルダと一緒に使用します。
引用 – データベース:マイグレーション 5.2 Laravel
まずはマイグレーションファイルを作成します。
php artisan make:migration create_samples_table
以下のように表示されたらOKです。
(yyyy_mm_dd_hhmmssには作成日時が入ります。)
Created Migration: yyyy_mm_dd_hhmmss_create_samples_table
database\migrations にマイグレーションファイル(yyyy_mm_dd_hhmmss_create_samples_table.php)が作成されるので、以下のように書き換えます。
database\migrations\yyyy_mm_dd_hhmmss_create_samples_table.php
<?php use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateSamplesTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('samples', function (Blueprint $table) { $table->increments('id'); $table->string('title'); $table->text('body'); $table->text('username'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::drop('samples'); } }
今回は以下のカラムを使用します。
- id
- title
- body
- username
- created_at
- updated_at
マイグレーションを実行します。
php artisan migrate
以下のように表示されたらOKです。
(バージョンやOSによって多少異なることがあるかもしれません。)
Migration table created successfully. Migrated: yyyy_mm_dd_hhmmss_create_users_table Migrated: yyyy_mm_dd_hhmmss_create_password_resets_table Migrated: yyyy_mm_dd_hhmmss_create_samples_table
シーダーの実行
シーダーを使用して、テストデータをデータベースに設定します。
database\seeds にSamplesTableSeeder.phpを作成します。
database\seeds\SamplesTableSeeder.php
<?php use Illuminate\Database\Seeder; class SamplesTableSeeder extends Seeder { public function run() { DB::table('samples')->truncate(); DB::table('samples')->insert([ [ 'title' => 'TestA', 'body' => 'TestA body test.', 'username' => 'userA', 'created_at' => '2016-08-12 14:00:00', 'updated_at' => '2016-08-12 14:00:00', ], [ 'title' => 'TestB', 'body' => 'TestB body test.', 'username' => 'userB', 'created_at' => '2016-08-12 14:03:00', 'updated_at' => '2016-08-12 14:03:00', ], [ 'title' => 'TestC', 'body' => 'TestC body test.', 'username' => 'userC', 'created_at' => '2016-08-12 14:06:00', 'updated_at' => '2016-08-12 14:06:00', ], ]); } }
作成後に下記を実行します。
composer dump-autoload
database\seeds\DatabaseSeeder.php を以下のように書き換えます。
database\seeds\DatabaseSeeder.php
<?php use Illuminate\Database\Seeder; use Illuminate\Database\Eloquent\Model; class DatabaseSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { Model::unguard(); $this->call('SamplesTableSeeder'); } }
シーダーを実行します。
php artisan db:seed
データベースにシーダーで作成したテストデータが追加されたのが確認できました。
モデル・コントローラー・ビューの作成
モデルはSample.phpというファイル名でappディレクトリ直下に作成します。
今回はappディレクトリ直下に配置しますが、appディレクトリ内ならどこでもよいようです。
app\Sample.php
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Sample extends Model { protected $fillable = ['title', 'body', 'username']; }
コントローラーはSamplesController.phpというファイル名でapp\Http\Controllers に作成します。
app\Http\Controllers\SamplesController.php
<?php namespace App\Http\Controllers; use App\Sample; class SamplesController extends Controller { protected $sample; public function __construct(Sample $sample) { $this->sample = $sample; } public function getIndex() { $samples = $this->sample->all(); return view('sample.index', compact('samples')); } }
ビューはresources\views\ にsampleディレクトリを作成して追加します。
resources\views\sample\index.blade.php
<!DOCTYPE html> <html> <head> <title>Sample</title> </head> <body> @foreach($samples as $sample) <div> <div>{{{ $sample->id }}}</div> <div>{{{ $sample->title }}}</div> <div>{{{ $sample->body }}}</div> <div>{{{ $sample->username }}}</div> <div>{{{ $sample->created_at }}}</div> <div>{{{ $sample->updated_at }}}</div> </div> <hr> @endforeach </body> </html>
最後にルーティングの記述を追加します。
app\Http\routes.php
Route::get('/sample', 'SamplesController@getIndex');
これで一通りの作成が完了しました。
下記を実行してブラウザで確認してみます。
php artisan serve
下記のように登録したデータが表示されました。
【参考サイト】
ルーティングの記述のディレクトリはapp\Http\routes.phpで合っているのでしょうか?
また、routes.phpを作成してコードを書くといった感じでしょうか?
chibaさん
コメントありがとうございます。
こちらの記事はLaravel5.2の時の内容で、Laravel5.3以降ではプロジェクトルート直下にroutesというディレクトリが追加になっています。
詳しくは以下記事を参照ください。
https://cly7796.net/blog/php/change-of-routing-in-laravel5-3/
XAMPP 5.6.8、Laravel 5.4.3
http://localhost:8000 でLaravel のロゴが表示されます。
テストデータは追加されています。プロジェクトは C:¥xampp¥htdocs¥laravel-db-test
publicフォルダ内で何か作業が必要なのでしょうか?
kob.svrさん
コメントありがとうございます。
上記サンプルではルート直下ではなく「/sample/」にデータを表示するようにしていますので、「 http://localhost:8000/sample/ 」に値が表示されます。