豆腐とコンソメ

豆腐とコンソメ

もろもろのプログラム勉強記録

LaravelでPKがIDじゃないときのfactory

Laravelで、PKがidじゃないテーブルをつくったときに、factoryの挙動がちょっと違ったのでメモ。

こんな感じのモデルがあって、PKがデフォルトと異なるので、プロパティにuser_idを書いてあげる。

PKがidではなくuser_idなUserモデル

<?php
class User extends Model
{
    protected $primaryKey = 'user_id';

    protected $fillable =  ['user_id];


}

この状態で、テスト用のファクトリーを定義してあげて、

<?php
//ユーザー情報
$factory->define(App\User::class, function (Faker $faker) {

    return [
        'user_id' => $faker->randomNumber(13),
        'name' => $faker->name
    ];
});

factoryを実行すると、

facotryを実行

>> factory('App\User')->create();
=> App\User {#979
     user_id: 0,
     name: "Dr. Zane Stroman",
     updated_at: "2018-07-04 16:52:37",
     created_at: "2018-07-04 16:52:37",
   }

あらuser_idが0になってる。


どうやら、デフォルトのPKのidはauto_incrementになってるので、その機能をオフにしてあげなきゃいけないみたい。


<?php
class User extends Model
{
    protected $primaryKey = 'user_id';

    protected $fillable =  ['user_id'];

    //追記
    public $incrementing = false;
}

これで、無事作成できた。

このへんのことを考えると、PKを全部idにしちゃったほうがフレームワークの機能的には使いやすいのかな。