laravel breezeでマルチログインのタスク管理ツールを作る①_下準備（seederでダミーデータ作成まで）

# 前提
- dockerでのプロジェクトは作成済み
- laravel breezeはインストール済み
- laravel sailでのコンテナ立上げ済み

前の章で上記済み
https://qiita.com/forever---searcher/items/1321590cb6af4c4383d9

# やること
1. taskモデル、ファクトリー、テーブルの作成、
1. userと、userに紐づくtaskのダミーデータ作成

まで

# 手順
1. `./vender/bin/sail artisan make:model Task`：Taskモデルの作成
1. `./vender/bin/sail artisan make:migration create_tasks_table`：マイグレーションファイルの作成
1. `./vender/bin/sail artisan make:factory TaskFactory --model=Task`：Taskファクトリーの作成
1. userFactory.phpの編集：ダミーのパスワードだと入れないので、後でログインできるよう調整
1. `./vender/bin/sail artisan migrate`：テーブルの作成
1. 各ファイルの中身整備
1. seederファイル`DatabaseSeeder.php`の整備
1. `./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',
        // ]);
    }
}
```
# 日本語データを作りたい場合
- [この記事](https://qiita.com/Sho-taro/items/feaaf025df15ab206994)の手順をやる
- `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`でダミーデータ作成

↑↑日本語のやり方調べるのに一日かかってしまった...

確認は
- sail  mysql
- select * from tasks\G
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1563301/599e1a1e-0826-d73e-9b0f-96cd28c69a7c.png)





# その他tips
- データ作成間違えたら、`./vender/bin/sail artisan migrate:fresh --seeder`で、ダミーデータ削除、再挿入



# このあとやりたいこと
- 管理者画面の作成
- ユーザーとデータの表示
- CRUD処理作成
- middlewareで権限分け
- ユーザー画面の作成
- 権限でログイン後遷移を分ける
- ユーザーのCRUD