localdisk

PHP とか Java とか Web とか好きなことを書きます。

CakePHPer のための Laravel 入門 - ブログチュートリアル1

CakePHPer のための Laravel 入門 - インストール - localdisk の続き。

さて、前回はインストール、環境の設定(localに設定しました)、拡張のインストールを行いました。今回はメインである CakePHP のブログチュートリアルを Laravel で実装してみましょう。

データベースの設定

まずは、cake-to-laravel/app/config/local/database.php を設定しましょう。前回触れましたが、Laravel は環境ごとの設定を容易に作成することができます。今回は local 環境のデータベースを SQLite を使用する設定を行います。たった一行追加するだけです。

<?php

return array(
    'default'     => 'sqlite', // <- ここを追加!
    'connections' => array(
        'mysql' => array(
            'driver'    => 'mysql',
            'host'      => 'localhost',
            'database'  => 'homestead',
            'username'  => 'homestead',
            'password'  => 'secret',
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
        ),
        'pgsql' => array(
            'driver'   => 'pgsql',
            'host'     => 'localhost',
            'database' => 'homestead',
            'username' => 'homestead',
            'password' => 'secret',
            'charset'  => 'utf8',
            'prefix'   => '',
            'schema'   => 'public',
        ),
    ),
);

これで local 環境は、SQLite を使用することになります。

マイグレーション

Laravel では、データベースのスキーマコントロールにマイグレーションを使用します。CakePHP でも同様のことができますがプラグインが必要です。まずはマイグレーションを使用できるようにするために以下のコマンドをターミナルから実行してください。

$ php artisan migrate:install

コマンドを実行したあと、以下のように表示されれば成功です。

Migration table created successfully.

テーブルの作成

マイグレーションの設定ができたら posts テーブルを作成しましょう。ターミナルで以下のコマンドを実行してください。

$ php artisan generate:migration create_posts_table

コマンド実行すると以下のように表示されます。

Created: /Users/localdisk/NetBeansProjects/cake-to-laravel/app/database/migrations/2014_08_03_061640_create_posts_table.php
Generating optimized class loader 

はい、作成できましたね。ではこのファイルを覗いてみましょう。

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;

class CreatePostsTable extends Migration
{

    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('posts', function(Blueprint $table)
        {
            $table->increments('id');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::drop('posts');
    }

}

ちゃんと出来ていますね。では、 up メソッドを修正しましょう。2行追加するだけです。

<?php
class CreatePostsTable extends Migration
{

    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('posts', function(Blueprint $table)
        {
            $table->increments('id');
            $table->string('title', 50); // 追加
            $table->text('body'); //  追加
            $table->timestamps();
        });
    }
}

修正したら、以下のコマンドを実行して posts テーブルを作成します。

$ php artisan migrate

コマンド実行すると以下のように表示されます。

Migrated: 2014_08_03_061640_create_posts_table

はい、これでテーブルができました。次はモデルを作成しましょう。

Post テーブルの作成

posts テーブルと対になる Post モデルを作成します。ターミナルで以下のコマンドを実行してください。

$ php artisan generate:model Post 

コマンド実行すると以下のように表示されます。

Migrated: 2014_08_03_061640_create_posts_table

これで Post モデルが作成されました。

<?php

class Post extends \Eloquent {
	protected $fillable = [];
}

シード

作成した posts テーブルに表示用の初期値を設定します。

$  php artisan generate:seed posts 

コマンド実行すると以下のように表示されます。

Created: /Users/localdisk/NetBeansProjects/cake-to-laravel/app/database/seeds/PostsTableSeeder.php  

これで PostsTableSeeder.php が作成されました。では、内容を確認してみましょう。

<?php

// Composer: "fzaninotto/faker": "v1.4.0"
use Faker\Factory as Faker;

class PostsTableSeeder extends Seeder
{

    public function run()
    {
        $faker = Faker::create();

        foreach (range(1, 10) as $index) {
            Post::create([
            ]);
        }
    }

}

生成されたファイルには Faker の記述がありますが、今回は使用しません。結構便利なライブラリなので、興味があるならぜひ使用してみてください。
では、ブログチュートリアルにそってデータを作成していきましょう。

<?php

class PostsTableSeeder extends Seeder
{

    public function run()
    {
        Post::create([
            'title' => 'タイトル',
            'body'  => 'これは、記事の本文です。'
        ]);
        Post::create([
            'title' => 'またタイトル',
            'body'  => 'そこに本文が続きます。'
        ]);
        Post::create([
            'title' => 'タイトルの逆襲',
            'body'  => 'こりゃ本当にわくわくする!うそ。'
        ]);
    }

}

そして DatabaseSeeder.php を以下のように修正します。

<?php

class DatabaseSeeder extends Seeder
{

    /**
     * データベースシード(初期値設定)を実行
     *
     * @return void
     */
    public function run()
    {
        Eloquent::unguard();
        // PostTableSeeder を実行する

        $this->call('PostsTableSeeder');
    }

}

では、db:seed コマンドを実行して初期値をテーブルに設定しましょう。

$ php artisan db:seed

コマンド実行すると以下のように表示されます。

Seeded: PostsTableSeeder

これでデータベースに初期値が設定されました。

続く!