我正在尝试使用以下索引在我的CRM中添加客户记录时阻止重复记录:
private static $indexes = array(
'IndexFirstSurName' => array(
'type' => 'unique',
'value' => '"FirstName","Surname"'
)
);
请注意,我Customer
来自Member
FirstName
和Surname
来自的class Customer extends Member
:
FirstName
但SilverStripe仍然允许Surname
和def add_squares(x, y):
return x*x + y*y
xs = np.array([0, 0, 1, 1])
ys = np.array([0, 1, 1, 0])
res = add_squares(x, y)
组合的重复输入?有没有人遇到过同样的问题?
答案 0 :(得分:2)
Man,根据我的经验,即使使用索引,仍然需要validate():
public function validate() {
$result = parent::validate();
if(Member::get()->filter(array('FirstName' => $this->FirstName, 'Surname' => $this->Surname))->first()) {
$result->error('First and Surname must be unique for each member.');
}
return $result;
}
或者更强大的突破:
public function validate() {
$result = parent::validate();
if($member = Member::get()->filter(array('FirstName' => $this->FirstName, 'Surname' => $this->Surname))->first()) {
if($member->FirstName == $this->FirstName){
$result->error('Your Surname is fine, please change your First Name.');
}
if($member->Surname == $this->Surname){
$result->error('Your First Name is fine, please change your Surname.');
}
}
return $result;
}
答案 1 :(得分:2)
请注意,我从会员中扩展了客户是FirstName而Surname来自
我想知道SilverStripe是否正在尝试在不存在的字段Customer.FirstName
和Customer.Surname
上设置索引。也许尝试通过预先添加实际的表来对列进行限定,如下所示添加索引:
private static $indexes = array(
'IndexFirstSurName' => array(
'type' => 'unique',
'value' => '"Member"."FirstName","Member"."Surname"'
)
);
你也可以考虑装饰 Member
而不是继承它。这样,您就不需要以这种方式限定查询片段。
答案 2 :(得分:2)
在SilverStripe上扩展Member
的方法是扩展DataExtension
。正如theruss所说,您正在尝试在表Customer
上创建一个唯一索引,您可以在其中找不到字段FirstName
和Surname
。
试试这个
class Customer extends DataExtension
{
private static $indexes = array(
'IndexFirstSurName' => array(
'type' => 'unique',
'value' => '"FirstName","Surname"'
)
);
}
然后让SilverStripe在config.yml
Member:
extensions:
- Customer
现在运行/dev/build?flush
,您应该会看到正在创建索引。
检查here以获取有关扩展程序的更多信息。