Laravel | Cart | モデルの作成

ホーム  

概要

2025年8月12日
見た目を大幅に変更しました。だいぶそれっぽくなっきたと思います。
というか、ひたすら Amaozn をお手本にさせていただいております。

Cart プロジェクトのモデル部分を実装していきます。Cart プロジェクトはユーザー用のモデルはありません。 ユーザーの情報はセッションに一時的に保存されます。今回実装するモデルは商品のモデルです。商品は多数あるので tinker ではなく、別の方法でデータを構築します。


データ構造の設定

database / migrations の中の 日付け_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->string('name');
            $table->text('desc')->nullable();
            $table->string('image')->nullable();
            $table->decimal('price');
            $table->decimal('quantity');
            // ここまで追加
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('products');
    }
};

ターミナルでデータ構造を読み込みます。


php artisan migrate

# 次のように表示されれば OK です。
2025_08_09_072641_create_products_table ........................ 1.69ms DONE

app / Models / Product.php を次のように変更します。


<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Testing\Fluent\Concerns\Has;

class Product extends Model
{
    use HasFactory;

    protected $fillable = [
        'name','price','desc','image','quantity'
    ];
}


データの読み込み

Seeder と呼ばれるデータ挿入用のファイルをターミナルで作ります。


php artisan make:seed ProductSeeder

database / seeders / ProductSeeder.php を次のように変更します。

2025年8月12日
デザイン変更のために変更されています。


<?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
    {
        // ここから
        $products = [
            [
                'name' => 'USB A to C',
                'desc' => 'USB A to C アダプタ',
                'image' => 'https://dummyimage.com/200x200/efefef/000&text=LBSC',
                'price' => 599,
                'quantity' => 1
            ],
            [
                'name' => 'MINI PC',
                'desc' => '2025 Intel N150',
                'image' => 'https://dummyimage.com/200x200/efefef/000&text=NiPoGi',
                'price' => 17998,
                'quantity' => 1
            ],
            [
                'name' => 'Intehill モバイルモニター',
                'desc' => '4K+ 13.4inch IGZOパネル',
                'image' => 'https://dummyimage.com/200x200/efefef/000&text=Intehill',
                'price' => 22680,
                'quantity' => 1
            ],
            [
                'name' => 'モニターアーム VESE',
                'desc' => '18.5インチ以下対応',
                'image' => 'https://dummyimage.com/200x200/efefef/000&text=Newsoul',
                'price' => 2999,
                'quantity' => 1
            ],
            [
                'name' => 'HDMI 切替器',
                'desc' => '2入力1出力 双方向 4K',
                'image' => 'https://dummyimage.com/200x200/efefef/000&text=UGREEN',
                'price' => 1799,
                'quantity' => 1
            ],
            [
                'name' => 'USB2.0スイッチセレクタ',
                'desc' => '2入力1出力/1入力2出力',
                'image' => 'https://dummyimage.com/200x200/efefef/000&text=YFFSFDC',
                'price' => 745,
                'quantity' => 1
            ],
            [
                'name' => 'ワイヤレスマウス',
                'desc' => '静音 M220CG 小型',
                'image' => 'https://dummyimage.com/200x200/efefef/000&text=Logicool',
                'price' => 1500,
                'quantity' => 1
            ],
            [
                'name' => 'USB 2.0ケーブル',
                'desc' => 'オスオス a-aタイプ 両端',
                'image' => 'https://dummyimage.com/200x200/efefef/000&text=TRkin',
                'price' => 434,
                'quantity' => 1
            ]
        ];

        foreach ($products as $key => $value) {
            Product::create($value);
        }
        // ここまで追加
    }
}

データをモデルに読み込みます。ターミナルで次のようにコマンドしてください。


php artisan db:seed --class=ProductSeeder

以上で、商品データが Product モデルに読み込まれ、商品データが完成しました。今回は、地味で長い作業になりました。


商品データを変更する場合

今後商品データを変更する場合は、 database / seeders / ProductSeeder.php を変更して、ターミナルで次のようにコマンドしてください。


# データ構造を空にしてマイグレーションファイルから作り直します。
php artisan migrate:refresh

# データを読み込みます。
php artisan db:seed --class=ProductSeeder



3324 visits
Posted: Aug. 09, 2025
Update: Aug. 12, 2025

ホーム   目次