ローカル環境で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/ 」に値が表示されます。