簡體   English   中英

檢查是否違反唯一約束

[英]Check for unique constraint violation

我的實體上有2個字段構成了唯一約束: fieldAfieldB ,分別映射到數據庫列field_afield_b

我的輸入過濾器需要兩個字段:

public function init()
{
    parent::init();

    $this->add([
        'name' => 'field_a',
        'required' => true,
        'allow_empty' => false,
    ]);

    $this->add([
        'name' => 'field_b',
        'required' => true,
        'allow_empty' => false,
    ]);
}

我試圖找出最好的方法來驗證這兩個字段在數據庫表中是唯一的。 如果已經存在具有相同字段值的不同實體,則輸入過濾器將無法通過驗證。

我以為我會覆蓋isValid函數並將自定義邏輯放在那里。

我建議在兩個字段上都使用回調驗證器(Zend \\ Validator \\ Callback),並將您的自定義邏輯放在回調函數中。

我將使用InputFilter將過濾器和驗證器添加到表單字段,但是您可以直接在Form / Fieldset類中實現InputFilterProviderInterface。

use Zend\InputFilter\InputFilter;

class FormFilter extends InputFilter
{

    public function __construct()
    {
       $this->add(
        array(
            'name' => 'field_a',
            'filters' => array(),
            'validators' => array (
                array(
                    'name' => 'Zend\Validator\Callback',
                    'options' => array(
                        'messages' => array(
                                \Zend\Validator\Callback::INVALID_VALUE => 'Custom Message',
                        ),
                        'callback' => array($this,'validateFieldA'),
                    ),
                ), 

            )
        )
       );

      $this->add(
        array(
            'name' => 'field_b',
            'filters' => array(),
            'validators' => array (
                array(
                    'name' => 'Zend\Validator\Callback',
                    'options' => array(
                        'messages' => array(
                                \Zend\Validator\Callback::INVALID_VALUE => 'Custom Message',
                        ),
                        'callback' => array($this,'validateFieldB'),
                    ),
                ), 

            )
        )
       );

    }

    public function validateFieldA($value, $context)
    {
        // $value contains the field_a value
        // $context['field_b'] contains the field_b value

        // put your custom logic here
        // return true if the fields are unique 
        // return false if the fields are not unique
    }

    public function validateFieldB($value, $context)
    {
          ....
    }


}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM