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をいよいよ書いていこう。