Laravelのバリデーターは予め多彩なルールが用意されています。 私自身は.Net歴が長いので数値範囲はRangeのアノテーションみたいな感じで指定すればいいという先入観からちょっとハマりました。 …
LaravelのFactoryは、様々なfakerで名前や市区町村のダミーデータが生成できますが、連番は用意されていません。
ただただ連番を振っていく
staticで連番用の変数を持ち、その値を加算しつつ振ることで順次連番を振ることが出来ます。
class SampleModelFactory extends Factory { protected $model = SampleModel::class; private static int $sequence = 1; public function definition() { return [ 'item_number' => function () { return self::$sequence++; }, ]; } }
○○ごとに連番を振っていく
PostとCommentなどの一対多の関係性のテーブルに対して、PostごとにComment番号を振る場合はもうひと工夫必要です。
staticの連番用の変数 ($commentNumber) を持つところまでは同じです。
次にPostIdごとに連番を初期化するために最後に振ったPostIdを記憶しておくためのstatic変数を用意します。
ポイント
は、configureメソッド内でfactory生成後に実行する処理として、最後に振ったPostIdと今回振られたPostIdが変わっていれば、commentNumberをリセットする点です。
class SampleModelFactory extends Factory { protected $model = SampleModel::class; private static int $postId = 0; private static int $commentNumber = 1; public function definition() { return [ 'post_id' => fn () => PostModel::factory()->create()->id, 'comment_number' => self::$commentNumber++, ]; } public function configure() { return $this->afterMaking(function (SampleModel $sampleModel) { // })->afterCreating(function (SampleModel $sampleModel) { if (self::$postId !== $sampleModel->post_id) { self::$postId = $sampleModel->post_id; self::$commentNumber = 1; } }); } }
コメントを書く