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