EC-CUBE4ではデフォルトでEC機能に必要な様々なテーブルが用意されていています。
トレイトファイルの作成とプロクシー機能を使って、既存のテーブルを変更する事ができます。
会員情報を管理している、dtb_customerにFAX番号を管理するカラムを追加してみましょう。
Traitファイルの生成
それでは、app/Customize/Entityファイルに以下の内容のファイルを作成しましょう。
<?php
namespace Customize\Entity;
use Doctrine\ORM\Mapping as ORM;
use Eccube\Annotation\EntityExtension;
/**
* @EntityExtension("Eccube\Entity\Customer")
*/
trait CustomerTrait
{
/**
* @ORM\Column(name="fax_number", type="string", length=14, nullable=true)
*/
public $fax_number;
/**
* Get fax_number
*
* @return fax_number
*/
public function getFaxNumber()
{
return $this->fax_number;
}
/**
* Set fax_number
*
* @return this
*/
public function setFaxNumber($fax_number)
{
$this->fax_number = $fax_number;
}
}
CustomerTraitファイルの解説
9行目:どのテーブル(エンティティ)を変更するか書きます。
14行目:カラム名、型、その他を設定
16行目:変数名を設定
18〜36行目:ゲッターとセッターを書きます。
Proxyファイルの生成
次のコマンドラインを打ち込んでProxyファイルを生成しましょう。
$ bin/console eccube:generate:proxies
gen -> /Users/******/eccube4_sources/ec-cube/app/proxy/entity/src/Eccube/Entity/Customer.php
生成されたファイルの中身を確認しましょう。
<?php
/*
* This file is part of EC-CUBE
*
* Copyright(c) EC-CUBE CO.,LTD. All Rights Reserved.
*
* http://www.ec-cube.co.jp/
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Eccube\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Component\Validator\Mapping\ClassMetadata;
/**
* Customer
*
* @ORM\Table(name="dtb_customer", uniqueConstraints={@ORM\UniqueConstraint(name="secret_key", columns={"secret_key"})}, indexes={@ORM\Index(name="dtb_customer_buy_times_idx", columns={"buy_times"}), @ORM\Index(name="dtb_customer_buy_total_idx", columns={"buy_total"}), @ORM\Index(name="dtb_customer_create_date_idx", columns={"create_date"}), @ORM\Index(name="dtb_customer_update_date_idx", columns={"update_date"}), @ORM\Index(name="dtb_customer_last_buy_date_idx", columns={"last_buy_date"}), @ORM\Index(name="dtb_customer_email_idx", columns={"email"})})
* @ORM\InheritanceType("SINGLE_TABLE")
* @ORM\DiscriminatorColumn(name="discriminator_type", type="string", length=255)
* @ORM\HasLifecycleCallbacks()
* @ORM\Entity(repositoryClass="Eccube\Repository\CustomerRepository")
*/
class Customer extends \Eccube\Entity\AbstractEntity implements UserInterface
{
use \Customize\Entity\CustomerTrait;
/**
* @var int
CustomerTraitファイルの解説
33行目:先ほど作成したTraitファイルをuseする事で、CustomerにFAXの管理カラムを追加しています。
テーブルへの反映
テーブルへの反映を行います。
$ bin/console d:s:u --dump-sql --force
The following SQL statements will be executed:
ALTER TABLE dtb_customer ADD fax_number VARCHAR(14) DEFAULT NULL;
Updating database schema...
1 query was executed
[OK] Database schema updated successfully!
OKがでていれば、実行完了です!
リンク
スポンサーリンク
スポンサーリンク