速習Larave3(その1)、レコードの表示

タグ: Laravel3  

Laravelの使い方を説明するショートチュートリアルシリーズです。

初回は、記事を表示するだけのミニブログです。

Laravelの準備は説明しません。

postsテーブル作成

今回はORMを利用します。PostモデルとしてDBのアクセスを行いたいため、テーブル名をpostsとします。

まずは、Artisanコマンドラインツールでマイグレーションを作成します。端末で以下のコマンドを実行してください。

php artisan migrate:make create_posts_table

application/migrationsフォルダーに日時に続いてcreate_posts_tableを含んだPHPファイルが作成されます。エディターで開き、以下の内容に書き換えてください。

<?php

class Create_Posts_Table {

    /**
     * Make changes to the database.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('posts', function($table)
        {
            $table->increments('id');
            $table->string('title', 50);
            $table->string('body', 8000);
            $table->timestamps();
        });
    }

    /**
     * Revert the changes to the database.
     *
     * @return void
     */
    public function down()
    {
        Schema::drop('posts');
    }
}

マイグレーションを実行します。まず最初に、マイグレーションの管理テーブルを作成します。これはLaravelが管理に使用するものです。次のコマンドを実行してくださ い。これは初回に一度だけ実行してください。

php artisan migrate:install

続いて、先ほど作成したマイグレーションを実行します。次のコマンドを実行してください。それにより未実行のマイグレーションが(今回はひとつだけですが)実行されます。

php artisan migrate

これでpostsテーブルが作成されました。確認してください。

続いて、記事を作成しましょう。まだ、入力ページは作成しません。再度マイグレーションを使用し、作りましょう。これで、初期データーを用意する方法(シーディング)を学 べます。まずはコマンドでマイグレーションを生成します。

php artisan migrate:make insert_first_post

生成されたマイグレーションをエディターで開き、以下の内容を入力してください。

<?php

class Insert_First_Post {

    /**
     * Make changes to the database.
     *
     * @return void
     */
    public function up()
    {
        DB::table('posts')
            ->insert( array(
                'title' => '最初のポスト',
                'body' => 'なるほどだ、世界',
                'created_at' => date('Y-m-d H:i:s'),
                'updated_at' => date('Y-m-d H:i:s'),
            ));
    }

    /**
     * Revert the changes to the database.
     *
     * @return void
     */
    public function down()
    {
        DB::table('posts')
            ->where('title', '=', '最初のポスト')
            ->delete();
    }

}

続いてORMモデルを作成します。ORMモデルとは、SQL文を直接記述せず、テーブルのレコードを表すクラスのインスタンスを通じて、更新、追加、削除処理を行う仕組みです。application/models/post.phpを作成してください。コードは以下の通りです。

<?php

class Post extends Eloquent
{
    public static $timestamps = true;
}

Eloquent ORMは、テーブルの単数形のクラス名でEloquentクラスを拡張するだけで、働いてくれます。timestampsプロパティはタイムスタンプフィールドを自動的に更新する指定です。(デフォルトでtrueなので、指定しなくても同じ動作をします。)記事などは保存した時間が大切な情報になりますので、付けましょう。大抵のテーブルには付けておきましょう。バグ修正やリカバリー時に役立つ情報です。

では内容を表示するビューを作成しましょう。application/viewsフォルダーにpostサブフォルダーを作成してください。その中にshow.blade.phpファイルを作成し、以下の内容で保存してください。LaravelのテンプレートエンジンであるBladeを使用しています。

<!doctype html>
<html lang="ja">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <title>ポスト表示</title>
    <meta name="viewport" content="width=device-width">
    {{ HTML::style('laravel/css/style.css') }}
</head>
<body>
    <div class="wrapper">
        <header>
            <h1>ミニブログ</h1>
            <h2>記事表示</h2>
            <p class="intro-text" style="margin-top: 45px;">
            </p>
        </header>
        <div role="main" class="main">
            <div class="home">
                <h2>{{ $title }}</h2>
                {{ $body }}
            </div>
        </div>
    </div>
</body>
</html>

最後にルートを定義します。application/routes.phpをエディターで開き、全体を以下のように書き換えてください。

<?php

Route::get('/', function()
{
    $post = Post::find(1);

    return view('post.show')
        ->with('title', $post->title)
        ->with('body', $post->body);
});

Event::listen('404', function()
{
    return Response::error('404');
});

Event::listen('500', function()
{
    return Response::error('500');
});

Route::filter('before', function()
{
    // Do stuff before every request to your application...
});

Route::filter('after', function($response)
{
    // Do stuff after every request to your application...
});

Route::filter('csrf', function()
{
    if (Request::forged()) return Response::error('500');
});

Route::filter('auth', function()
{
    if (Auth::guest()) return Redirect::to('login');
});

ルートルート(root route)つまり、ドメイン名だけでブラウザからアクセスした場合のルートで、今作成したPostクラスを使用し、最初のレコードを表示します。

実際にブラウザからアクセスして、試してください。もし、仮想ホストのドメイン名(マシン名)の設定がsample.devでしたらhttp://sample.devにアクセスします。ドキュメントルートはpublicフォルダーを指定しておいてください。

マイグレーションで作成した最初のレコードが表示されます。