Laravelでデータベースに接続してみる

ローカル環境でLaravelでデータベースに接続して、データを取得してみます。

データベースの作成

今回はXAMPPでデータベースを作成してみます。
XAMPPのApacheとMySQLを起動しておきます。

to-connect-to-the-database-with-laravel01

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

データベースにシーダーで作成したテストデータが追加されたのが確認できました。

to-connect-to-the-database-with-laravel02

 

モデル・コントローラー・ビューの作成

モデルは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

下記のように登録したデータが表示されました。

to-connect-to-the-database-with-laravel03

 

【参考サイト】

 

このエントリーをはてなブックマークに追加

関連記事

4件のコメント

  1. chiba より:

    ルーティングの記述のディレクトリはapp\Http\routes.phpで合っているのでしょうか?
    また、routes.phpを作成してコードを書くといった感じでしょうか?

  2. kob.svr より:

    XAMPP 5.6.8、Laravel 5.4.3
    http://localhost:8000 でLaravel のロゴが表示されます。
    テストデータは追加されています。プロジェクトは C:¥xampp¥htdocs¥laravel-db-test
    publicフォルダ内で何か作業が必要なのでしょうか?

    • cly7796.net より:

      kob.svrさん
      コメントありがとうございます。
      上記サンプルではルート直下ではなく「/sample/」にデータを表示するようにしていますので、「 http://localhost:8000/sample/ 」に値が表示されます。

コメントを残す

メールアドレスが公開されることはありません。
* が付いている欄は必須項目です

CAPTCHA


コメントが承認されるまで時間がかかります。

2024年11月
 12
3456789
10111213141516
17181920212223
24252627282930