Laravel 外部キー Tinker
外部キー制約
紐づくモデル名+「_id」で外部キーと呼ぶ
shops
テーブルにowner_id
を作成しowners
テーブルのid
と紐付ける
model migration seederの作成
- shopのマイグレーションファイル
foreignId('owner_id')->constrained();
で「紐づくモデル名_id」として指定
<?php public function up() { Schema::create('shops', function (Blueprint $table) { $table->id(); //紐づくモデル名_id $table->foreignId('owner_id')->constrained(); $table->string('name'); $table->text('information'); $table->string('filename'); $table->boolean('is_selling'); $table->timestamps(); }); }
DatabaseSeederクラス内で、callメソッドを使用して追加したシードクラスを実行する
→\App\Models\User::factory(10)->create();
<?php public function run() { //DatabaseSeederクラス内で、callメソッドを使用して追加したシードクラスを実行する // \App\Models\User::factory(10)->create(); $this->call([ AdminSeeder::class, OwnerSeeder::class, ShopSeeder::class, ]); }
<?php public function run() { DB::table('shops')->insert([ [ 'owner_id' => 1, 'name' => 'ここに店名がはいります', 'information' => 'ここにお店の情報が入ります。ここにお店の情報が入ります。ここにお店の情報が入ります。', 'filename' => '', 'is_selling' => true ], [ 'owner_id' => 2, 'name' => 'ここに店名がはいります', 'information' => 'ここにお店の情報が入ります。ここにお店の情報が入ります。ここにお店の情報が入ります。', 'filename' => '', 'is_selling' => true ], ]); }
$ php artisan migrate:refresh --seed
→ロールバックで全てのテーブルが削除され、migrateされたあとにseederが実行
Laravel Tinker リレーション
- リレーションをつける
1つのownerが1つのshopをもつ(1対1)
→1つのshopが複数の商品をもつとかテーブル同士がつながっていて、それぞれのデータを扱いやすくする仕組み
hasOne(相手先のエロクアント)
とすると1対1の関係になる。
メソッドとエロクアントモデル名は同じにする。
<?php use App\Models\Shop; public function shop() { return $this->hasOne(Shop::class); }
- 逆の関係の定義
Owner→Shopではなく、Shop→Ownerの場合は
belongsTo
を使う
<?php use App\Models\Owner; public function owner() { return $this->belongsTo(Owner::class); }
Tinkerでみていく
Tinkerを使えば直接DBにアクセスしてリレーションを確認できる