#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';
 }

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS