フリーランスのためのネットビジネス専門学校 ネットで独立開業を目指す人を応援
フリーランスのためのネットビジネス専門学校 ネットで独立開業を目指す人を応援

EC-CUBE4を日本語以外で使う

概要

Laravel の factory でおなじみ Facker さんを使って複合ユニークなカラムでダミーデータを作るときに若干詰んだのでメモです

テーブル

↓のような複合 PK の factory を作成する前提です

CREATE TABLE `inventories` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `inventory_id` int(10) unsigned NOT NULL,
  `inventory_group_id` int(10) unsigned NOT NULL,
  `user_id` int(10) unsigned NOT NULL,
  `name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `count` tinyint(3) unsigned NOT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE inventory_group_id_inventory_id (`inventory_group_id`, `inventory_id`),
  INDEX user_id_inventory_group_id (`user_id`, `inventory_group_id`),
  FOREIGN KEY (`user_id`) REFERENCES users(`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci

やりかた

結果的には、どちらか片方をランダムに生成
そのあとは、regexify にてユニークなキーになるような正規表現でもう片方を抽出することでできました


$factory->define(Inventory::class, function (Faker $faker) {
    $inventoryGroupId = mt_rand(1, 3);
    $code             = $faker->unique()->regexify("/^$inventoryGroupId-[1-9]{1}[0-9]{0,5}$/");
    $inventoryId      = intval(explode('-', $code)[1]);

    Log::info('InventoryFactory', [
        'inventoryGroupId' => $inventoryGroupId,
        'inventoryId'      => $inventoryId,
        'code'             => $code,
    ]);

    return [
        'inventory_id'       => $inventoryId,
        'inventory_group_id' => $inventoryGroupId,
        'user_id'            => 1,
        'name'               => $faker->word,
        'count'              => mt_rand(0, 10),
    ];
});

このときの正規表現を [0-9]+ にしちゃうとカラムの型範囲外に出ちゃうので [1-9]{1}[0-9]{0,5} にしてます

[紹介元] PHPタグが付けられた新着投稿 – Qiita EC-CUBE4を日本語以外で使う

コメント

記事に戻る

コメントを残す