前提
- dockerでのプロジェクトは作成済み
- laravel breezeはインストール済み
- laravel sailでのコンテナ立上げ済み
前の章で上記済み
https://qiita.com/forever---searcher/items/1321590cb6af4c4383d9
やること
- taskモデル、ファクトリー、テーブルの作成、
- userと、userに紐づくtaskのダミーデータ作成
まで
手順
-
./vender/bin/sail artisan make:model Task
:Taskモデルの作成 -
./vender/bin/sail artisan make:migration create_tasks_table
:マイグレーションファイルの作成 -
./vender/bin/sail artisan make:factory TaskFactory --model=Task
:Taskファクトリーの作成 - userFactory.phpの編集:ダミーのパスワードだと入れないので、後でログインできるよう調整
-
./vender/bin/sail artisan migrate
:テーブルの作成 - 各ファイルの中身整備
- seederファイル
DatabaseSeeder.php
の整備 -
./vender/bin/sail artisan db:seed
でダミーデータ作成
Task.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Task extends Model
{
use HasFactory;
+ protected $fillable = [
+ 'user_id',
+ 'title',
+ 'description',
+ 'completed',
+ 'due_date',
+ ];
}
create_tasks_table.php
public function up(): void
{
Schema::create('tasks', function (Blueprint $table) {
$table->id();
$table->foreignId('user_id')->constrained()->onDelete('cascade');
$table->string('title');
$table->text('description')->nullable();
$table->boolean('completed')->default(false);
$table->timestamp('due_date')->nullable();
$table->timestamps();
});
}
TaskFactory.php
<?php
namespace Database\Factories;
+ use App\Models\User;
+ use App\Models\Task;
use Illuminate\Database\Eloquent\Factories\Factory;
/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Task>
*/
class TaskFactory extends Factory
{
+ protected $model = Task::class;
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
+ $userIds = User::pluck('id')->toArray(); //作成されているユーザーのidを引っ張る
return [
+ 'user_id' => $this->faker->randomElement($userIds),
+ 'title' => $this->faker->sentence,
+ 'description' => $this->faker->paragraph,
+ 'completed' => $this->faker->boolean,
+ 'due_date' => $this->faker->dateTimeThisMonth,
];
}
}
userFactory.php
public function definition(): array
{
return [
'name' => fake()->name(),
'email' => fake()->unique()->safeEmail(),
'email_verified_at' => now(),
'password' => static::$password ??= Hash::make('password'),
'remember_token' => Str::random(10),
];
}
DatabaseSeeder.php
<?php
namespace Database\Seeders;
// use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Seed the application's database.
*/
public function run(): void
{
- //\App\Models\User::factory(10)->create();
+ \App\Models\User::factory(10)->create();
+ \App\Models\Task::factory(30)->create();
// \App\Models\User::factory()->create([
// 'name' => 'Test User',
// 'email' => 'test@example.com',
// ]);
}
}
日本語データを作りたい場合
- この記事の手順をやる
-
config/app.php
の修正:'faker_locale' => 'ja_JP',
にする -
sail artisan config:clear
でキャッシュクリア -
sail down
してsail up -d
でコンテナ再作成(ダミーデータ入れてたら消えます) -
'title' => $this->faker->realText(20)
,
'description' => $this->faker->realText(100)
にタスクファクトリー修正 -
sail artisan db:seed
でダミーデータ作成
↑↑日本語のやり方調べるのに一日かかってしまった...
確認は
その他tips
- データ作成間違えたら、
./vender/bin/sail artisan migrate:fresh --seeder
で、ダミーデータ削除、再挿入
このあとやりたいこと
- 管理者画面の作成
- ユーザーとデータの表示
- CRUD処理作成
- middlewareで権限分け
- ユーザー画面の作成
- 権限でログイン後遷移を分ける
- ユーザーのCRUD