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 {
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にしちゃったほうがフレームワークの機能的には使いやすいのかな。