魔法使いの卵

WEBエンジニアの卵の成長記録

Laravel4のsqliteでテーブルを作ってテストデータをぶっこんでみたったw@改修ver

今回はLaravel4に入ってるsqliteをつかって一覧表示をさせるために

テーブル作成〜テストデータを流し込むまでの手順を書くでー!!

今回はわりと長いで・・・

 

よっしゃ!!そしたらまず、今回使うモデルから作るでー!!

 

モデル

<?php

class User extends Eloquent{

/**
* モデルで使用されるデータベース
*
* @var string
*/
protected $table = 'users';

/* timestampを使う */

public $timestamps = true;

/* softdeleteを使う */                                   

use SoftDeletingTrait;

/**
* createメソッド実行時に、入力を禁止するカラムの指定
*
* @var array
*/
protected $guarded = array('id');
}

 migrationを使うときはデフォルトでtimestamps()が動くみたいで

使わないのであればここで

public $timestamps = false;

でつかわねーよ!!って宣言してあげないとだめー。

 

use SoftDeletingTraitってなんなん?

timestamps()とやってることは似てて

こいつはdeleteメソッドが走った時に自動で生成するdeleted_atっていう

カラムに削除日を登録してくれる便利な子。

この子のすごいところはそこだけじゃない。

論理削除してくれるってところがすごい。

つまりデータとしては残しておくけど実際にはないように見せるでーって。

動き的にはdelete_flagみたいなかんじ。

deleted_atにデータがあれば非表示にするしなければ表示するしみたいな。

 

 次はこっち

protected $table = 'users';

データベース名をここに記載してあげるねん。

一応ルールがあるみたいでモデル名の複数形を記述しないとあかんらしいで!!

 

最後にこれや!

protected $guarded = array('id');

 これなにしとんねんっておもったけど

やってることは今回作るusersテーブルはidを

連番にしたいねん。せやから、データとか入れらると

おかしくなってまうから入力できひんカラムを指定してあげてるねん。

 

この3つを見るとモデルってまるで

ルールを書くところみたいやなぁー。

 

<!--ここまでmodel>

 

次はマイグレーションファイルを作るでー!!

migration

 

Laravel4/の直下で下記のコマンドを叩く

php artisan migrate:make users_table

すると

Laravel4/app/database/migrationsでlsしてみると

2014_12_26_154416_users_table.phpっていうのができてるはずやでー!!

 

タイムスタンプが押されたマイグレーションファイルが作成されてるはずやでー!!

俺最初これでテーブルできてるとおもってたアホまるだしw

 

んじゃ次は生成された2014_12_26_154416_users_table.phpを編集するで!!

マイグレーションでupメソッドを編集するでー!!

.public function up()                                                    

   {

Schema::create('users', function($table)

{

    $table->increments('id');

    $table->string('email');

    $table->string('password');

    $table->string('name');

    $table->string('tel');

    $table->string('zip');

    $table->string('delete_flag');

    $table->timestamps();

    $table->softDeletes();

    });

}

 

Schema::create()

で実際に作りたいテーブル名を記述してあげるねん。

ここが動いた時にはじめてテーブルが生成されるでー!!

 

function($table)

では変数にモデルで指定したデータベース名をもたせてあげてるねん!!

 つまり、モデル側で

$table='users' == データベース名

ということは、ここでやってることはデータベースusersに対してusersテーブルを

つくるでーってことを書いてると思うねん。

ここをちゃんと見てたらマイグレーションファイルがテーブルをつくるって

勘違いはせーへんはずやでー!自分はちゃんと見てなかったから勘違いしてたけどw

 

こいつらなにものなん?

$table->timestamps();

$table->softDeletes();

model側でさっきtimestampsとsoftDeleteを使うってことを記述したやん?

でもその時なんもカラムの情報かいてなかったやろ?

こいつがカラムになるんやで!!

しかも1つ1つcreated_atとかupdated_atとかdeleted_atとか

かかんくてええねん。もうそれだけで感動してもうたわw

$table->timestamps(); 

で自動生成されるカラムはcreated_at(insertメソッドを走らせた日時が登録される)と

updated_at(updateメソッドを走らせた日時が登録される)の2つやでー!!

 

$table->softDeletes();

で自動生成されるカラムはdeleted_at(deleteメソッドを走らせた日時を登録される)。

 

そしたら実行してみよか

編集が終わったらルートディレクトリで

マイグレーションを実行させる必要があるで!!

下記コマンドで実行してみるで!!

php artisan migrate

やってることは未実行のすべてのマイグレーションを実行するってことやでー!!

こっちのコマンドでロールバックすることができるんやでー!!

php artisan migrate:rollback

 

これでLaravel4のsqliteにテーブルが作成されてるはずやで!!

嘘やとおもうんやったら下記のコマンドでためしてみるとええで!!

ドキュメントルートで

sqlite3 app/database/production.sqlite

これでsqlかけるところにいけてるはず。

で、実際どうやってテーブルの有無を確認するねんあほんだら!!

ってなるとおもうねんけど、

.table 

sqliteマイグレーションを使って生成されたテーブルがあるはずやでー!!

あったやろ?

そしたら一旦sqliteから離れよか

.quit 

 で抜けれるでー!!

<!--ここまでmigration>

 

ほんならいよいよseedでテストデータを作成していこかー!!

class UserTableSeeder extends Seeder {

     public function run()
     {

          User::create(array(
               'email'            => 'user01@test.co.jp',
               'password'    => 'user01',
               'name'           => 'user01',
               'tel'                => '09000000001',
               'zip'               => '0'

               'created_at'  => '2015-01-01';

               'updated_at' => '2015-01-02';

               'deleted_at'  => '2015-01-03';

               'delete_flag' => '0'
          '));
}

やってることはSeederを継承したクラスUserTableSeederをまず用意するねん
そん次にクラスが呼び出されたらrunメソッドが動いて
そのrun()メソッドになにをさせるのかってことを記載していくでー!!

まず、やってることとしては
DB::table('users')->delete();
このメソッドが動いたら最初にusersテーブルを消すわ!!っていうて綺麗に消されるねん。
その次にUser::create(array('キー'=>'値'));ってのが動くんやけど
わかりやすく書くと

モデル名::create(array('キー'=>'値'));

ってことやなー!!

 

気になるのはモデルで変数$tableにデータベース名をぶっこんで

マイグレーションでモデルで指定したデータベースにテーブルを作るってことを

しているやん?

なんでここでそしたらモデル名指定してるんやろか?

モデル名とテーブル名を指定してるんならわかるんやけどなぁ。

うーん。勉強不足。

 

話戻すけど、createでマイグレーションファイルで記載したカラム情報に対して
今回なにをテストデータとしてぶっこみたいかを書いていくんやでー!!

ちなみに今回は一覧表示で複数のレコードをみたいから
さらに下記のデータを追加していくでー!!

public function run()
{
     DB::table('users')->delete();

     User::create(array(
          'email' => 'user02@test.co.jp',
          'password' => 'user02',
          'name' => 'user02',
          'tel' => '09000000002',
          'zip' => '0', 
          'created_at'  => '2015-01-01';

          'updated_at' => '2015-01-02';

          'deleted_at'  => '2015-01-03';

          'delete_flag' => '0'
     '));
}

public function run()
{
     DB::table('users')->delete();

     User::create(array(
          'email' => 'user03@test.co.jp',
          'password' => 'user03',
          'name' => 'user03',
          'tel' => '09000000003',
          'zip' => '0',

          'created_at'  => '2015-01-01';

          'updated_at' => '2015-01-02';

          'deleted_at'  => '2015-01-03';

          'delete_flag' => '0'
     '));
}

これでテストデータが3レコード入れる準備は整ったで!!

ちなみに

class UserTableSeeder extends Seeder の{}の閉め忘れに注意

じゃあ下記コマンドでさっき作ったusersテーブルに テストデータ流し込むで!!

php artisan db:seed(ドキュメントルートで叩くんやで!!)

<!--ここまでseed>

 

よし!!

じゃあほんまにこれでテストデータがusersテーブルに入ったか確認するでー!!

 ドキュメントルートに戻って下記のコマンド達をたたいていくでー!!

sqlite3 app/database/production.sqlite

select * from users;

 これで今回作ったテーブルにテストデータが入っているか見ることができるでー!!

 

長くなったけど、これでsqliteを使ったテストデータ生成はおしまい!!

 

補足:

マイグレーションを消した時は

隠しファイルも消さないとあかんでー!!

rm パス 消したいファイル名

 

テーブルを消す時は

 sqlite3 app/database/production.sqlite

drop table テーブル名; 

 

よく使うコマンドのチートシートでもつくろうかなw

今回相当はまったから覚えれたけどw

 

参考元

DB:マイグレーション