扩展成员 class 仍在尝试写入成员 table

Extended Member class still attempting to write to Member table

我正在扩展成员 table 以包含基本地址详细信息。

设置:

class ClientMember extends Member {

    private static $db = array(
        "AddressLine1" => "Varchar(255)",
        "AddressLine2" => "Varchar(255)",
        "Country"      => "Varchar(50)",
        "State"        => "Varchar(50)",
        "Postcode"     => "Int(4)"
    );

    public function getCMSFields() {
        $fields = parent::getCMSFields();

        $addressLine1 = new TextField('AddressLine1', 'Address line 1', null, 255);
        $addressLine2 = new TextField('AddressLine2', 'Address line 2', null, 255);
        $country      = new CountryDropdownField('Country', 'Country', null, 'AU');
        $state        = new DropdownField('State', 'State', array('vic' => 'Victoria', 'sa' => 'South Australia', 'wa' => 'Western Australia'));
        $postcode     = new NumericField('Postcode', 'Postcode', null, 4);

        $fields->addFieldsToTab(
            'Root.Address',
            array(
                $addressLine1,
                $addressLine2,
                $country,
                $state,
                $postcode
            )
        );

        return $fields;
    }
}

然后我告诉 SilverStripe 在 YAML 配置中使用 ClientMember 的新 class 名称。

Injector:
  Member:
    class: ClientMember

问题:

然后我可以通过 CMS 创建新的 'Client Members',新的地址选项卡和字段都按预期工作。保存时出现以下错误:

string 'Couldn't run query: UPDATE "Member" SET "AddressLine1" = 'Test', "AddressLine2" = 'Test', "Country" = 'AU', "State" = 'vic', "Postcode" = 1212, "LastEdited" = '2015-07-10 12:43:58' where "ID" = 10

Unknown column 'AddressLine1' in 'field list'' (length=245)

注意它正在尝试将新字段写入 Member table 而不是扩展的 ClientMember table.

我错过了什么?

我这样做的方法是用 DataExtension 扩展 Member,如下所示:

客户会员

class ClientMember extends DataExtension {

    private static $db = array(
        "AddressLine1" => "Varchar(255)",
        "AddressLine2" => "Varchar(255)",
        "Country"      => "Varchar(50)",
        "State"        => "Varchar(50)",
        "Postcode"     => "Int(4)"
    );

    public function updateCMSFields(FieldList $fields) {

        $addressLine1 = TextField::create('AddressLine1', 'Address line 1', null, 255);
        $addressLine2 = TextField::create('AddressLine2', 'Address line 2', null, 255);
        $country      = CountryDropdownField::create('Country', 'Country', null, 'AU');
        $state        = DropdownField::create('State', 'State', array('vic' => 'Victoria', 'sa' => 'South Australia', 'wa' => 'Western Australia'));
        $postcode     = NumericField::create('Postcode', 'Postcode', null, 4);

        $fields->addFieldsToTab(
            'Root.Address',
            array(
                $addressLine1,
                $addressLine2,
                $country,
                $state,
                $postcode
            )
        );
    }
}

config.yml

Member:
  extensions:
    - ClientMember