仕事で管理しているEC-CUBE(3系)で作られたサイトで、注文情報に「注文前に表示していた出荷日情報」を追加することになったので、その時おこなった手順をまとめておく。

dtb_orderテーブルにカラムを追加

まず、注文情報を管理するdtb_orderテーブルにカラム(今回はshowed_shippingというカラム名)を追加する。

データ型はDateとした。

Entityファイルの更新(プロパティとゲッター・セッターの追加)

注文情報を管理するエンティティファイルsrc/Eccube/Entity/Order.phpに新規プロパティと、関連するゲッター、セッターを追加する。

// 以下を追加

private $showed_shipping;

public function setShowedShipping($showed_shipping) 
{ 
    $this->showed_shipping = $showed_shipping; 
    return $this; 
} 

public function getShowedShipping() 
{ 
    return $this->showed_shipping; 
}

FormTypeに新規項目を追加

Formの項目を管理するファイルsrc/Eccube/Form/Type/ShoppingType.phpに新たに項目を追加する。

/** 
 * {@inheritdoc} 
 */ 
public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $payments = $options['payments']; 
    $payment = $options['payment']; 
    $message = $options['message']; 
    $builder 
        // ...省略

        // 以下を追加
        ->add('showed_shipping', 'text', array( 
            'required' => false, 
            'data' => '', 
        )); 
}

ShoppingServiceファイルの更新

備考欄のように注文内容確認画面に入力欄を設ける場合は、src/Eccube/Service/ShoppingService.phpファイルのsetFormDataメソッドでプロパティのセッターを実行するようにする。

/** 
 * フォームデータを更新 
 * 
 * @param Order $Order 
 * @param array $data 
 */ 
public function setFormData(Order $Order, array $data) 
{ 
    // お問い合わせ 
    $Order->setMessage($data['message']);

    // お届け先情報を更新 
    $shippings = $data['shippings']; 
    foreach ($shippings as $Shipping) { 
        $deliveryTime = $Shipping->getDeliveryTime(); 
        if (!empty($deliveryTime)) { 
            $Shipping->setShippingDeliveryTime($deliveryTime->getDeliveryTime()); 
        } 
    } 
     
    // 以下を追加
    $Order->setShowedShipping($data['showed_shipping']); 
}

注文内容確認画面に追加項目を表示

今回は前もって設定した出荷日情報をhidden値として送信したかったので、テンプレート側Shopping/index.twigで以下のように出力させるようにした。

{# 注文確定時に表示されていた出荷日情報 #}
{{ form_widget(form.showed_shipping, {'attr': {'id': 'showed_shipping'}, 'type': 'hidden'}) }}

追加したカラムに書き込むための設定

最後にsrc/Eccube/Resource/doctrine/Eccube.Entity.Order.dcm.ymlへ、追加したカラムへデータを書き込むための設定を追加する。

    // 以下を追加
    fields:
        showed_shipping: 
            type: datetime 
            nullable: true

これでdtb_orderテーブルへ追加した項目に値を書き込めるようになる。