LoginSignup
15
19

More than 5 years have passed since last update.

ECサイトを作る時に欲しいダミー商品データの作り方

Last updated at Posted at 2018-10-29

自主勉強がてらにLaravelでECサイトを作ってみようと思っているのですが、決済の処理を実装しようにも肝心の商品をデータとして用意する必要があります。
PHPではFakerを使って電話番号やメールアドレスと言った仮のデータを作ることが出来ますが、商品に関する仮データには対応していない様だったので作り方をざっとまとめます。

*基本的な処理や画面はLaravel学習帳のCRUD処理の内容を元にしています。

動作環境について

OS:macOS High Sierra
version: 10.13.6
Docker(Engine):18.06.1-ce

対象ブラウザ
GoogleChrome:69以上

作成する環境
centOS:7.5
Laravel:5.6
PHP:7.2
MySQL:5.7
APache2.4

参考資料

CRUDアプリの作成(一覧)
CSVファイルの特定の列を取り出す

商品データを作る前にやっておきたいこと

仮のデータを用意しておき、その後SQL文で商品データを上書きする形を取ります。
その為、先にFakerで仮データを入れておきます。

仮データの作成

テーブル「goods」のデータ形式

下記の様な構成のテーブルを用意する予定です。(id、作成日時、更新日時は除く。)

カラム名 データ型
商品コード 文字列
商品名 文字列
規格 文字列
価格 数値
メーカー 文字列
発売日 日付
取扱日 日付

テーブルの作成

[root@87c2be02241a shop]# php artisan make:migration create_goods_table
Created Migration: 2018_10_21_172119_create_goods_table

上記のデータ形式に沿ってテーブル定義を書きます。

Schema::create('goods', function (Blueprint $table) {
    $table->increments('id');
    $table->string('goods_code', 6);
    $table->string('goods_name', 255);
    $table->string('standard', 255);
    $table->integer('price');
    $table->string('maker', 255);
    $table->timestamp('release_date')->nullable();
    $table->timestamp('handling_date')->nullable();
    $table->timestamps();
});

migration実行

[root@87c2be02241a shop]# php artisan migrate
Migrating: 2018_10_21_172119_create_goods_table
Migrated:  2018_10_21_172119_create_goods_table

これで「goods」テーブルが作成されます。

Modelを作成

仮データを作る為にまずModelを作ります。

[root@87c2be02241a shop]# php artisan make:model Models/Goods
Model created successfully.

Modelでは更新対象のカラムを指定しておきます。

class Goods extends Model
{
    public $timestamps = true;
    protected $fillable = [
        'goods_code',
        'goods_name',
        'standard',
        'price',
        'maker',
        'release_date',
        'handling_date',
        'updated_at'
    ];
}

ModelFactoryの作成

[root@87c2be02241a shop]# php artisan make:factory GoodsFactory
Factory created successfully.

Fakerのリファレンスを参考に、作成したfactoryファイル(GoodsFactory.php)を修正します。
*Modelの指定の仕方に注意してください。

$factory->define(App\Models\Goods::class, function (Faker $faker) {
    return [
        'goods_code' => $faker->unique()->bothify('???###'),
        'goods_name' => $faker->unique()->lexify('Goods????'),
        'standard' => $faker->unique()->bothify('###???'),
        'price' => $faker->unique()->numberBetween($min = 800, $max = 20000),
        'maker' => $faker->unique()->company,
        'release_date' => $faker->unique()->dateTimeThisMonth($max = 'now', $timezone = 'Asia/Tokyo'),
        'handling_date' => $faker->unique()->dateTimeBetween($startDate = '-5 days', $endDate = 'now', $timezone = 'Asia/Tokyo')
    ];
});

シーダーファイルの作成

仮データを挿入するシーダーファイル(GoodsTableSeeder.php)を作成します。

[root@87c2be02241a shop]# php artisan make:seed GoodsTableSeeder
Seeder created successfully.

「GoodsTableSeeder」の編集を行います。
今回は100行分の商品データを作ります。
*ここもModelの指定に注意してください。

public function run()
{
    factory(\App\Models\Goods::class, 100)->create();
}

シーダー実行の為に「DatabaseSeeder.php」の編集を行います。

public function run()
{
    $this->call(GoodsTableSeeder::class);
}

シーダー実行

[root@87c2be02241a shop]# php artisan db:seed
Seeding: GoodsTableSeeder

これで一旦の仮データが作成されます。

20181029_1.png

商品データの作成

今度は実際にECサイト上で利用したい商品データを作って行きます。

CSVファイルの作成

商品のダミーデータはSmartDataさんにて作成します。
こちらではデフォルトで、

カラム名
商品コード
商品名
規格
価格
メーカー
発売日

のダミーデータを作成することが出来ます。
これに、「id」「取扱日」あたりをカラムとして合わせてデータを作成すればそれなりの商品データが作れそうです。

まずはテストデータ生成ページの「サンプル(商品データ)を呼び出す場合はこちら」を押下します。

20181029_2.png

「テストデータ定義」の「Step1.[構造設定]」タブ内「ルール設定/書式設定」カラムを編集します。
「価格」行の「ルール設定/書式設定」列を押下すると背景が水色に変化します。

20181029_3.png

カラム内の「削除」を押下し、一旦ルール設定を削除(空白)します。

次に「オブジェクト定義」の「Step2.[オブジェクト生成]」タブ内「数値」プルダウンを押下します。
プルダウン内の「数値_1」を選択します。

「最小値」、「最大値」等を任意の数字に合わせ、「登録」ボタンを押下します。

20181029_4.png

次に「Step3.[ルール設定]」タブを押下します。
「数値_1」行の「数値」を押下します。

20181029_5.png

すると、「テストデータ定義」のルール設定にも「数値_1.数値」のルールが適用される様になります。

20181029_6.png

同様に、日付のフォーマットも編集します。
「発売日」行の「ルール設定/書式設定」列を押下し、既存のルール設定を削除します。

20181029_7.png

20181029_8.png

続けて「オブジェクト定義」の「Step2.[オブジェクト生成]」タブ内「日付」プルダウンを押下します。
プルダウン内の「日付_1」を選択します。

20181029_9.png

「開始年月日」、「終了年月日」等を任意の数字に合わせ、「登録」ボタンを押下します。

次にStep3.[ルール設定]」タブを押下します。
「日付_1」行のプルダウンリストを押下します。
プルダウンリスト内の「Y/m/d H:i:s」のフォーマットを選択します。

20181029_10.png

「日付_1」行の「カラムに設定する」を押下します。

20181029_11.png

これで「発売日」のルール設定が出来ました。

20181029_12.png

最後は「テストデータ定義」の「Step4.[出力設定]」タブを押下します。
「出力形式」を「CSV形式で保存」に選択して、
「出力件数」を「100」
にし、「実行」ボタンを押下してCSVファイルをダウンロードします。

20181029_13.png

シェルスクリプトによる SQLファイルの作成

CSVファイルは下記の様になっています。

20181029_14.png

このデータを用いてシェルスクリプトでupdate用のSQL文を作ります。
まずはデータの整形を行います。

CSVデータの整形

エディターでダウンロードしたCSVファイルを開き、スペースを置換します。

また、「発売日」データに含まれている「/」を「-」に置換します。
*スペースを空白で置き換えると、日付と時間の間のスペースも無くなってしまいますが、これはこのままで大丈夫です。

整形後は以下の様な形になります。

HIM001,みんなのガーリック,350g,5870,株式会社ダミーネット・メディエク化成工業,2016-01-1207:29:05

置き換え後のデータを「update_data.csv」とでもリネームしておきましょう。

シェルスクリプトの作成

CSVデータを元にupdate文のSQLファイルを作るシェルスクリプトを作成ます。

#!/bin/sh

CSV_FILE=update_data.csv
id=1

# DB
TABLE_NAME="shop1.goods"
GOODS_CODE="goods_code"
GOODS_NAME="goods_name"
STANDARD="standard"
PRICE="price"
MAKER="maker"
RELEASE_DATE="release_date"


for line in `cat ${CSV_FILE}`
do
  colmun1=`echo ${line} | cut -d ',' -f 1`
  colmun2=`echo ${line} | cut -d ',' -f 2`
  colmun3=`echo ${line} | cut -d ',' -f 3`
  colmun4=`echo ${line} | cut -d ',' -f 4`
  colmun5=`echo ${line} | cut -d ',' -f 5`
  colmun6=`echo ${line} | cut -d ',' -f 6`

SENTENCE=$(cat << EOS
UPDATE ${TABLE_NAME} 
SET ${GOODS_CODE}="${colmun1}", 
${GOODS_NAME}="${colmun2}", 
${STANDARD}="${colmun3}", 
${PRICE}=${colmun4}, 
${MAKER}="${colmun5}", 
${RELEASE_DATE}="${colmun6:0:10} ${colmun6:10:8}" 
WHERE id="${id}";
EOS
)

  echo ${SENTENCE} >> update_goods.sql
  id=$(( id + 1 ))
done

このスクリプトを実行すると、下記の様な「update_goods.sql」が作成されます。

UPDATE shop1.goods SET goods_code="HIM001", goods_name="みんなのガーリック", standard="350g", price=5870, maker="株式会社ダミーネット・メディエク化成工業", release_date="2016-01-12 07:29:05" WHERE id="1";

SQLの実行

商品データの作成も最後です。
作成したSQLファイルを読み込ませます。

[root@87c2be02241a laravel]# mysql -uユーザー名 -p shop1 < update_goods.sql

これにてデータが更新されます。
画面で簡単に出力するとこんな感じになります。

20181029_last.png

商品データの作成は以上となります。
このデータを利用してCRUD処理が出来る様にコードを書いていけば個人でも擬似的なECサイトが出来そうです。

15
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
19