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