繁体   English   中英

SilverStripe重复条目,即使具有唯一索引

[英]SilverStripe duplicate entries even with unique index

当我在具有以下索引的CRM中添加客户记录时,我试图防止重复记录:

private static $indexes = array(
    'IndexFirstSurName' => array(
        'type' => 'unique', 
        'value' => '"FirstName","Surname"'
    )
);

请注意,我从FirstNameSurname来自的Member扩展了Customer

class Customer extends Member 

但是SilverStripe仍然允许FirstNameSurname组合的重复条目吗? 有没有人遇到过同样的问题?

这个人,以我的经验,即使使用索引也仍然需要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;
}

请注意,我从“会员”扩展的“客户”是“名字”和“姓氏”来自

我想知道SilverStripe是否正在尝试在不存在的字段Customer.FirstNameCustomer.Surname上设置索引。 也许可以通过在实际在表上添加索引的表之前尝试对列进行限定,如下所示:

private static $indexes = array(
    'IndexFirstSurName' => array(
        'type' => 'unique', 
        'value' => '"Member"."FirstName","Member"."Surname"'
    )
);

您可能还考虑装饰 Member而不是对其进行子类化。 这样,您就不需要以这种方式限定查询片段。

在SilverStripe上扩展Member的方法是扩展DataExtension 就像Theruss所说的那样,您正在尝试在表Customer上创建唯一索引,但您可能在其中没有FirstNameSurname字段。
试试这个

class Customer extends DataExtension
{
    private static $indexes = array(
        'IndexFirstSurName' => array(
            'type' => 'unique', 
            'value' => '"FirstName","Surname"'
        )
    );
}

然后在config.yml让SilverStripe知道您的扩展名

Member:
  extensions:
    - Customer

现在运行/dev/build?flush ,您应该看到正在创建索引。

在此处查看有关扩展的更多信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM