魔法使いの卵

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

Larave5 テーブルを作成してテストデータを流し込んでみたったw

既存のuserマイグレーションファイルを書き換えてみた

マイグレーション
Laravel5/database/migrations/の直下の
2014_10_12_000000_create_users_table.php

こいつを今回遊ぶ用に色々いじくりまわしてみる

public function up()
{
    Schema::create('users', function(Blueprint $table)
    {
        $table->increments('id');
        $table->string('password', 60);
        $table->string('email')->unique();
        $table->string('name');
        $table->integer('zipcode');
        $table->integer('address');
        $table->integer('barthday');
        $table->integer('age');
        $table->integer('sex');
        $table->timestamps();
        $table->softDeletes();
        $table->integer('delete_flag');
        $table->rememberToken();
    });
}


こんな感じでユーザの個人情報のカラムをつけてみた。
デフォルトで入っているのは赤字のところ。

$table->rememberToken();
なんやこいつ

Eloquent認証ドライバーを使うのに必要 

下記ドキュメントの一部抜粋

Laravelはデフォルトとして、appディレクトリーの中の、App/Userモデルを読み込みます。このモデルはデフォルトのEloquent認証ドライバーと共に使用されます。

重要:このモデルのデータベーススキーマを定義するとき、パスワードカラムは最低でも60文字にしてください。また使用する前に、空文字列を許し(NULLABLE)100文字の文字列のremember_tokenカラムをusers(もしくは同様の)テーブルへ確実に定義してください。マイグレーションで$table->rememberToken();を使用すれば、このカラムが設定されます。もちろん、Laravel5では、これらのカラムのためのマイグレーションは、初めから用意してあります!

 

次にモデルいじる

Laravel5/app/Users.php

use Illuminate\Database\Eloquent\SoftDeletes;

class User extends Model implements AuthenticatableContract, CanResetPasswordContract {

use Authenticatable, CanResetPassword;

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

 

/**
* 複数代入を行う属性
*
* @var array
*/
protected $fillable = ['name', 'email', 'password', 'zipcode', 'address', 'barthday', 'age', 'sex', 'delete_flag'];

/**
* モデルのJSON形式に含めない属性
*
* @var array
*/
protected $hidden = ['password', 'remember_token'];

/**
* timestampsとsoftdeleteを利用する
*
*/
public $timestamps = true;
use SoftDeletes;
protected $dates = ['deleted_at'];
}

 

protected $guardedと$fillable ってなんやねん。

Eloquentモデルは複数代入たるものから保護されていてる。
createメソッドでデータを挿入するには下記の2つのどちらかを指定する。

  • protected $guarded
  • protected $fillable

$fillableの中に「id」が入っていないのは
auto_incrementが設定されている場合は指定する必要がないっぽい。

 

 

次にテストデータをつくる手順

laravel5/database/seeds/DatabaseSeeder.php

下記のコメントをとってあげる
$this->call('UserTableSeeder');

 

次にlaravel5/database/seedsの直下で

UserTableSeeder.phpを作成する(ここでテストデータをつくる)

<?php
use Illuminate\Database\Seeder;//これを追加しないとエラーになります!
use App\User;//これを追加しないとエラーになります!Appの名前空間を変えている場合は適宜変更を忘れずに!

class UserTableSeeder extends Seeder {

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

        User::create(array('name' => 'foo',
        'email' => 'foo@bar.com',
        'password' => 'foo',
        'zipcode' => '1',
        'address' => '番地',
        'barthday' => '20150215',
        'age' => '20',
        'sex' => '1',
        'created_at' => '2015-02-01',
        'updated_at' => '2015-02-02',
        'deleted_at' => '2015-02-15',
        'delete_flag' => '1',
        ));
    }

}

 

テストデータを流し込んでみる

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

php artisan db:seed 

 

はい、でましたエラー
原因はvimで手動でファイルを作成してしまったのが原因

artisan make:コマンド

で作った場合はオートローダー処理されるけど、

手作りでファイルを作るとたいていこれに見舞われます。
なので下記コマンドでオートローラーの再構築をおこなう
composer dump-autoload

 

もう一度

php artisan db:seed
でseedを実行させてあげる。

補足:マイグレーションとseed

php artisan migrate:refresh –seed
をすると、全てのマイグレーションロールバックして
再度マイグレーションをしながらかつseedもやってくれる。

 

今回使ったsqliteのコマンド

テーブルの確認

下記コマンドでsqliteにアクセスする

sqlite3 storage/database.sqlite

テーブルのカラムの確認
PRAGMA TABLE_INFO(TABLE_NAME);

テストデータの確認
select * from テーブル名;

 

感想:

  • protected $guarded
  • protected $fillable

はどっちかを使えばええみたいw

 

参考元:

Laravel 5 Seedで見る名前空間追加の例 | warpvillage.com