#author("2023-09-23T17:17:44+09:00","default:shota","shota") #author("2023-09-23T17:28:43+09:00","default:shota","shota") [[FrontPage]] *概要 [#i5329523] -お遊びサーバ・検証サーバがサクッと作れるところがお気に入り(詳しい機能知らなくても使える) -稀に使用するので忘れやすい箇所だけメモしておく *目次 [#n63f08d5] #contents *DB [#red1e1ce] -マイグレートファイルを作成し,DBのカラムを定義. **マイグレーションファイルの作成 [#w3e5c094] $ php artisan make:model モデル名 [--migration もしくは -m] **マイグレーションを実行する [#v7500a66] $ php artisan migrate # すべてのマイグレーションをロールバックして新しく実行 $ php artisan migrate:refresh # シーディングも行う $ php artisan migrate --seed **マイグレーションファイルで外部キー制約をつける [#b6d6a35a] -外部キーでリレーションを定義 #highlightjs(php) // 外部キーを定義 $table->unsignedBigInteger('user_id'); // 定義した外部キーに制約をつける $table->foreign('user_id')->references('id')->on('users'); -上記は冗長な書き方.以下の簡単な書き方も利用可能 #highlightjs(php) // キーの定義と制約付を同時にできる(idがunsigned big intの場合のみ利用可能) $table->foreignId('user_id')->constrained(); // constrainedは'確定'みたいな働き **モデルクラスでリレーションを使う [#j67859d2] -1対1の場合は以下のようにして呼び出す -Phoneモデルにはuser_idカラムがあるとする #highlightjs(php) class User extends Model { public function phone(): HasOne { return $this->hasOne(Phone::class [, Phoneモデルのuser_idキー以外を指定する場合のキー名]); } } -逆の関係の場合(PhoneモデルからUserを取得できるようにする) #highlightjs(php) class Phone extends Model { public function user(): BelongsTo { return $this->belongsTo(User::class); } } -呼び出し方法は以下の通り #highlightjs(php) $phone = User::find(1)->phone; **主キーに文字列を使用する [#nefc0eff] -主キーはデフォルトでは数値が使用されることを想定している -主キーは'id'というカラムが使用されるが'$primaryKey'プロパティで別のカラムを指定することもできる -文字列などの非数値を主キーに使用する場合は'$incrementing'プロパティを'false'にしていしてインクリメントを明示的にさせないようにする -モデルの主キーが数値ではない場合は'$keyType'プロパティで主キーの型を指定する #highlightjs(php) <?php class MyModel extends Model { // 主キーの名前 $protected $primaryKey = 'my_primary_id'; // モデルのIDを自動増分するかどうか public $incrementing = false; // 主キーの型 protected $keyType = 'string'; }