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

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

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

class Customer extends Member 

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

===============>>#1 票数:2 已采纳

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

===============>>#2 票数:2

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

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

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

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

===============>>#3 票数:2

在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 ,您应该看到正在创建索引。

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

  ask by The Man translate from so

未解决问题?本站智能推荐: