コンテンツにスキップ

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');
    }
}