laravelを勉強し始めて1日の初心者です。
userが1日に歩いた歩数を管理するテーブルuser_walkingsテーブルを作成し、
Factory経由でuser_walkingsテーブルにデータをいれるSeederを作成中で、
user_walkingsテーブルにはUsersテーブルのuser.idを参照するuser_idカラムを追加し、外部キー制約付きでテーブルをマイグレーションしております。
##実現したいこと
Seederを使い、usersテーブルの既存のユーザーをランダムで5人取得し、
1人につき1週間分の日付(5人×7日分なので最大35レコード)を初期データとしてデータベースに登録するためにCollection time()を使用すれば実現できるということが分かったのですが、正しい記載方法がわからないため、ご教授お願いしたいです。
##collectionを使わないで実現したコード
php
1 2//UserWalkingTableSeeder.php 3<?php 4 5use App\Models\User; 6use App\Models\UserWalking; 7use Illuminate\Database\Seeder; 8 9class UserWalkingTableSeeder extends Seeder 10{ 11 /** 12 * Run the database seeds. 13 * 14 * @return void 15 */ 16 public function run() 17 { 18 $users = User::inRandomOrder()->take(5)->get(); 19 $users->each(function ($user) { 20 $walk_date = new DateTime('2021-10-31'); 21 for ($i = 0; $i < 7; $i++) { 22 factory(UserWalking::class, 1)->create([ 23 'user_id' => $user->id, 24 'walk_date' => $walk_date->modify('+1day')->format('y-m-d') 25 ]); 26 } 27 }); 28 } 29}
php
1//UserWalkingFactory.php 2<?php 3 4use App\Models\UserWalking; 5use Faker\Generator as Faker; 6 7$factory->define(UserWalking::class, function (Faker $faker) { 8 return [ 9 'user_id' => function () 10 { 11 return factory(App\Models\User::class)->create()->id; 12 }, 13 'walk_cnt' => $faker->numberBetween(10, 10000), 14 'walk_date' => '', 15 'created_at' => now(), 16 'updated_at' => now(), 17 ]; 18});
上記をfor文ではなく、Collection::times()で同じ様に実現したいのですが、調べてもよくわからず正しい書き方がわからないので、データを挿入することが出来ませんでした。皆さんの力をお借りしたいです。よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。