見出し画像

inertia.js(react) + survey.js - 1: 設計

  • 一般ユーザーと管理者だけのシンプルな権限設定

  • survey自体の作成は管理者が行う

  • surveyが作成されたら各ユーザーは誰でも受けることができる

  • 一度受けたsurveyは再度はできない結果は即座に公開され自信の回答を見る事ができる。

  • 何らかの集計viewを作成する

テーブル設計

まあ、まずsurveyテーブルは必要である

 artisan make:model Survey -mrfs

スイッチの説明とかはchatgptに聞いてみたりするといいっすよ

以下sailでの作業ログ

% ./vendor/bin/sail artisan make:model Survey -mrfs

   INFO  Model [app/Models/Survey.php] created successfully.

   INFO  Factory [database/factories/SurveyFactory.php] created successfully.

   INFO  Migration [database/migrations/2023_09_29_135347_create_surveys_table.php] created successfully.

   INFO  Seeder [database/seeders/SurveySeeder.php] created successfully.

   INFO  Controller [app/Http/Controllers/SurveyController.php] created successfully.

これにカラムを足していく

        Schema::create('surveys', function (Blueprint $table) {
            $table->id();
            $table->string('title');
            $table->text('description')->nullable();
            $table->json('settings')->nullable();
            $table->timestamps();
        });

このように、ある程度chatgptの力を借りていくと開発が効率よくなるかも。

モデル定義

app/Models/Survey.php

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Survey extends Model
{
    use HasFactory;

    protected $fillable = [
        'title',
        'description',
    ];

    protected $casts = [
        'settings' => 'array',
    ];

}

これのちょっと特殊なところはsettings(設定)にjson型を使っている。これをlaravelで使う場合は脳死でarrayキャストしてもいいかもしれない。あと、fillableの値においてはcontrollerから変更されるカラムは書いておく。settingsもそうなんじゃないの?って感じもするけど、これはまあ後回しのゆとり設計であり、とりあえずはtitleとdescriptionだけを変更できたらいいだろう。

以上を踏まえて次回はsurveyのCRUDをいよいよ書いていこう。



いいなと思ったら応援しよう!