register_types テーブル定義
概要
レジ種別を管理するマスターテーブル。商品のレジ種別(通常、定期購読等)を管理する。
用途: 商品のレジ種別選択、通常商品と定期購読商品の区分などで使用。
テーブル情報
| 項目 | 値 |
|---|---|
| テーブル名 | register_types |
| エンジン | InnoDB |
| 文字セット | utf8mb4 |
| 照合順序 | utf8mb4_unicode_ci |
| コメント | レジ種別マスター |
カラム定義
| カラム名 | 型 | NULL | デフォルト | キー | 説明 |
|---|---|---|---|---|---|
| id | BIGINT UNSIGNED | NOT NULL | AUTO_INCREMENT | PK | 主キー |
| name | VARCHAR(100) | NOT NULL | - | - | 名称(通常、定期購読等) |
| sort_order | INT UNSIGNED | NOT NULL | 0 | INDEX | 表示順序 |
| is_active | BOOLEAN | NOT NULL | TRUE | INDEX | 有効フラグ |
| created_at | TIMESTAMP | NULL | NULL | - | 作成日時 |
| updated_at | TIMESTAMP | NULL | NULL | - | 更新日時 |
インデックス
| 種別 | 名称 | 対象カラム | 説明 |
|---|---|---|---|
| PRIMARY KEY | pk_register_types | id | 主キー |
| INDEX | idx_sort_order | sort_order | 表示順序検索 |
| INDEX | idx_is_active | is_active | 有効フラグ検索 |
外部キー制約
なし(マスターテーブルのため)
リレーション
このテーブルは他のテーブルから参照される:
| 関連先テーブル | 関連タイプ | 外部キー | 参照先 | ON DELETE | ON UPDATE | 説明 |
|---|---|---|---|---|---|---|
| products | 1:N | register_type_id | id | RESTRICT | RESTRICT | 1つのレジ種別は複数の商品で使用される(レジ種別削除時は使用中の商品があるとエラー、商品削除はレジ種別に影響なし) |
データ例
| id | name | sort_order | is_active |
|---|---|---|---|
| 1 | 一般 | 1 | TRUE |
| 2 | 定期購読 | 2 | TRUE |
備考・注意事項
レジ種別の管理方針
初期データ
マイグレーション時に以下の初期データが投入される:
- 一般: 通常商品(sort_order: 1)
- 定期購読: 定期購読商品(sort_order: 2)
レジ種別の用途
- 商品区分: 通常商品と定期購読商品を区別
- 価格設定: 定期購読商品には特別価格を適用する場合に使用
有効化ポリシー
- is_active: 有効/無効フラグ
- 無効化: 使用されていないレジ種別を無効化(論理削除ではない)
- 再有効化: 無効化されたレジ種別を再度有効化可能
クエリ例
-- 有効なレジ種別一覧を取得
SELECT id, name
FROM register_types
WHERE is_active = TRUE
ORDER BY sort_order;
-- レジ種別別の商品数
SELECT
r.name,
COUNT(p.id) as product_count
FROM register_types r
LEFT JOIN products p ON r.id = p.register_type_id
WHERE r.is_active = TRUE
GROUP BY r.id, r.name
ORDER BY r.sort_order;
Eloquentモデル例
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class RegisterType extends Model
{
protected $fillable = [
'name',
'sort_order',
'is_active',
];
protected function casts(): array
{
return [
'is_active' => 'boolean',
];
}
// 有効なレジ種別一覧を取得
public static function getActiveRegisterTypes(): Collection
{
return self::where('is_active', true)
->orderBy('sort_order')
->get();
}
// 並び替え順で取得
public function scopeOrdered($query)
{
return $query->orderBy('sort_order');
}
}