products テーブル定義
テーブル概要
商品の基本情報を管理するマスターテーブルです。既存テーブルを拡張し、商品規格システムに対応させています。
テーブル名: products
説明: 商品マスター
用途: 商品の基本情報(名前、説明、ステータス等)を管理
カラム定義
| カラム名 |
型 |
NULL |
デフォルト |
キー |
説明 |
| id |
BIGINT UNSIGNED |
NOT NULL |
AUTO_INCREMENT |
PK |
主キー |
| brand_id |
BIGINT UNSIGNED |
NULL |
NULL |
FK |
ブランドID(brands.id) |
| creator_id |
BIGINT UNSIGNED |
NULL |
NULL |
FK |
作成者ID(admins.id) |
| register_type_id |
BIGINT UNSIGNED |
NULL |
NULL |
FK |
レジ種別ID(register_types.id) |
| name |
VARCHAR(255) |
NOT NULL |
- |
- |
商品名 |
| slug |
VARCHAR(255) |
NOT NULL |
- |
UNIQUE |
URL用スラッグ |
| image |
JSON |
NULL |
NULL |
- |
商品画像(配列、表示順は配列順) |
| description |
TEXT |
NULL |
NULL |
- |
商品説明(既存) |
| description_list |
TEXT |
NULL |
NULL |
- |
商品一覧用説明文(新規) |
| search_word |
TEXT |
NULL |
NULL |
- |
検索キーワード(新規) |
| free_area |
TEXT |
NULL |
NULL |
- |
フリーエリア(HTML可)(新規) |
| status |
TINYINT UNSIGNED |
NOT NULL |
1 |
INDEX |
ステータス(1=公開, 2=非公開) |
| is_active |
BOOLEAN |
NOT NULL |
TRUE |
INDEX |
販売状態(TRUE=販売中、FALSE=販売中止) |
| on_sale |
BOOLEAN |
NOT NULL |
TRUE |
- |
セール中フラグ(TRUE=セール中、FALSE=通常価格) |
| sort_order |
INTEGER |
NOT NULL |
0 |
INDEX |
表示順序 |
| created_at |
TIMESTAMP |
NULL |
NULL |
- |
作成日時 |
| updated_at |
TIMESTAMP |
NULL |
NULL |
- |
更新日時 |
| deleted_at |
TIMESTAMP |
NULL |
NULL |
INDEX |
削除日時(Soft Delete) |
インデックス
| 種別 |
名称 |
対象カラム |
説明 |
| PRIMARY KEY |
pk_products |
id |
主キー |
| UNIQUE KEY |
uk_products_slug |
slug |
URL用スラッグの重複防止 |
| INDEX |
idx_products_status |
status |
ステータス別検索 |
| INDEX |
idx_products_is_active |
is_active |
販売状態別検索 |
| INDEX |
idx_products_sort_order |
sort_order |
表示順序別検索 |
| INDEX |
idx_products_creator |
creator_id |
作成者別検索 |
| INDEX |
idx_products_deleted |
deleted_at |
Soft Delete用 |
外部キー制約
| 名称 |
対象カラム |
参照先 |
ON DELETE |
ON UPDATE |
説明 |
| fk_products_brand |
brand_id |
brands(id) |
SET NULL |
RESTRICT |
ブランド削除時はNULL |
| fk_products_creator |
creator_id |
admins(id) |
SET NULL |
RESTRICT |
作成者削除時はNULL |
| fk_products_register_type |
register_type_id |
register_types(id) |
RESTRICT |
RESTRICT |
レジ種別を削除しようとした時に、そのレジ種別を使用している商品があるとエラー |
リレーション
データ例
| id |
brand_id |
creator_id |
register_type_id |
name |
slug |
status |
description_list |
description_detail |
| 100 |
1 |
1 |
1 |
コットンTシャツ |
cotton-t-shirt |
1 |
着心地の良いコットンTシャツ |
100%コットン素材で作られた... |
| 200 |
2 |
1 |
1 |
レモン飲料 |
lemon-drink |
1 |
さわやかなレモン味 |
国産レモンを使用した... |
| 300 |
NULL |
1 |
NULL |
電子書籍 |
ebook-basic |
1 |
プログラミング入門書 |
初心者向けのプログラミング... |
備考・注意事項
既存からの変更点
削除されたカラム
price → product_vars.priceに移行
stock_quantity → product_vars.stockに移行
is_unlimited_stock → product_vars.stock_unlimitedに移行
is_featured → 将来の機能拡張で追加予定
残存カラム(フロントエンドで使用)
on_sale: セール中フラグ(TRUE=セール中、FALSE=通常価格)
- Migrationに存在し、フロントエンドで使用されている
- 管理画面(ProductResource)では編集不可(Modelのfillableに含まれていない)
- 注: product_vars.special_priceとは別の概念として存在
新規追加カラム
description_list: 商品一覧ページ用の短い説明
search_word: 検索機能用のキーワード
free_area: 自由記述エリア(HTML可)
status: 公開/非公開の管理(1=公開, 2=非公開)
is_active: 販売中/販売中止の管理(TRUE=販売中, FALSE=販売中止)※既存カラムを再利用
creator_id: 作成者管理
register_type_id: レジ種別管理(NULL可、削除時はRESTRICT)
ステータス管理(status)
| 値 |
名称 |
説明 |
| 1 |
Published |
公開(フロントエンドで表示) |
| 2 |
Draft |
非公開(管理画面のみ) |
販売状態管理(is_active)
| 値 |
説明 |
| TRUE |
販売中(購入可能) |
| FALSE |
販売中止(表示のみ、購入不可) |
削除管理(deleted_at)
| 値 |
説明 |
| NULL |
有効 |
| TIMESTAMP |
削除済み(Soft Delete) |
3つの概念の使い分け
ケース1: 公開中・販売中の商品
status = 1 (Published)
is_active = TRUE
deleted_at = NULL
→ サイトで表示、購入可能
ケース2: 公開中・販売中止の商品
status = 1 (Published)
is_active = FALSE
deleted_at = NULL
→ サイトで表示、購入不可(「販売終了」等のメッセージ表示)
ケース3: 非公開・販売中の商品(準備中)
status = 2 (Draft)
is_active = TRUE
deleted_at = NULL
→ サイトで非表示、管理画面で編集可能
ケース4: 削除された商品
status = 1 or 2
is_active = TRUE or FALSE
deleted_at = '2024-01-01 00:00:00'
→ サイトで非表示、管理画面で「削除済み」扱い
説明文の使い分け
description: 既存データとの互換性のため維持
description_list: 商品一覧ページで表示(短め)
画像管理
image: JSON配列(表示順は配列順)
- 外部テーブル化は行わない(検索が稀なため)