以前の記事でデータベースにアプローチする方法を記載しました。
- DBクラス(クエリビルダ): Controller内に記述します。
- Eloquent(ORM) :Modelを生成して使用します。
MVCモデルを使って実装していきたいので、Eloquent(ORM)「エロクアント」の使い方について学んでいきます。
Eloquentを使用する場合、各データベーステーブルに対応する「モデル」があり、そのテーブル操作に使用します。Eloquentモデルは、データベーステーブルからレコードを取得するだけでなく、テーブルへのレコード挿入、更新、削除も可能です。上記の通り、Eloquentを使用するには対象のテーブルに対応するモデルがあり、それに対して操作を行うとのことです。
テーブル名
別の名前を明示的に指定しない限り、クラスの複数形の「スネークケース」をテーブル名として使用します。
Modelの作成
とりあえずModelを作ってみます。
Userモデルを作ろうと思ったのですがなぜか最初から存在しています。
Productモデルを代わりに作成します。
$php artisan make:model Product
app/Models/Product.phpが以下のように生成されました。
<?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Product extends Model { use HasFactory; }
マイグレーションファイルの作成
マイグレーションはデータベースのバージョン管理のようなもので、チームがアプリケーションのデータベーススキーマを定義および共有できるようにします。
$php artisan make:migration create_products_table
こんな感じでコマンドを実行するとdatabase\migrations/2023_04_10_075612_create_products_table.phpが以下のように生成されました。
<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; return new class extends Migration { /** * Run the migrations. */ public function up(): void { Schema::create('products', function (Blueprint $table) { $table->id(); $table->timestamps(); }); } /** * Reverse the migrations. */ public function down(): void { Schema::dropIfExists('products'); } };
ただこれだけだと、idとタイムスタンプしかないので編集していきます。
プライマリーキーは、product_idにしました。以下のように設定します。
マイグレーションファイル |
$php artisan migrate
を実行すると以下のようにテーブルが作成されました。
コマンド実行してテーブルを新規作成する |
DBを確認すると以下のようにテーブルが作成されていました。
作成されたテーブル |
シーダーを使った初期データ登録
<?php namespace Database\Seeders; use Illuminate\Database\Console\Seeds\WithoutModelEvents; use Illuminate\Database\Seeder; class ProductSeeder extends Seeder { /** * Run the database seeds. */ public function run(): void { // } }
上記のようにrun()メソッドがあるだけです。
ここに初期データを記載していきます。Eloquentを使って1件のデータを作成してみます。
<?php namespace Database\Seeders; use Illuminate\Database\Console\Seeds\WithoutModelEvents; use Illuminate\Database\Seeder; use App\Models\Product; class ProductSeeder extends Seeder { /** * Run the database seeds. */ public function run(): void { Product::create([ 'product_name' => 'Test1', 'product_price' => 100, ]); } }
$php artisan db:seed --class ProductSeeder
を実行します。
想定したレコードがproductsテーブルに挿入されました。
設定したのは、”product_name”、”product_price” のみです。他のカラムは自動的に設定されました。
プライマリーキーも自動で1が設定されています。
0 件のコメント:
コメントを投稿