LoginSignup
0
0

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

Last updated at Posted at 2024-04-16

前提

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

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

やること

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

まで

手順

  1. ./vender/bin/sail artisan make:model Task:Taskモデルの作成
  2. ./vender/bin/sail artisan make:migration create_tasks_table:マイグレーションファイルの作成
  3. ./vender/bin/sail artisan make:factory TaskFactory --model=Task:Taskファクトリーの作成
  4. userFactory.phpの編集:ダミーのパスワードだと入れないので、後でログインできるよう調整
  5. ./vender/bin/sail artisan migrate:テーブルの作成
  6. 各ファイルの中身整備
  7. seederファイルDatabaseSeeder.phpの整備
  8. ./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でダミーデータ作成

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

確認は

  • sail mysql
  • select * from tasks\G
    image.png

その他tips

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

このあとやりたいこと

  • 管理者画面の作成
  • ユーザーとデータの表示
  • CRUD処理作成
  • middlewareで権限分け
  • ユーザー画面の作成
  • 権限でログイン後遷移を分ける
  • ユーザーのCRUD
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0