扩展成员 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
我正在扩展成员 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