patchEntity tell字段的验证错误不是唯一的

时间:2015-06-18 07:27:34

标签: cakephp-3.0

我更新了一个实体(同样的id),我在一个具有“唯一”规则的字段上收到验证错误。
我在数据库中验证了没有现有的相同字段,所以我不明白为什么我有这个错误,因为我更新记录所以显然字段已经存在因为它本身! 在patchEntity()上有一个“唯一”规则是一个问题吗?

[
    'site_name' => '...',
    'datas' => object(App\Model\Entity\User) {

        'id' => (int) 653,
        'owner_id' => (int) 611,
        'extraemails' => [
        ],
        'owner' => object(App\Model\Entity\Owner) {

            'id' => (int) 611,
            'company' => 'This is the Company name',
            'created' => object(Cake\I18n\Time) {

                'time' => '2015-06-06T18:07:17+0000',
                'timezone' => 'UTC',
                'fixedNowTime' => false

            },
            'modified' => object(Cake\I18n\Time) {

                'time' => '2015-06-17T02:44:36+0000',
                'timezone' => 'UTC',
                'fixedNowTime' => false

            },
            '[new]' => false,
            '[accessible]' => [
                'email' => true,
                'phone' => true,
                'phone2' => true,
                'fax' => true,
                'company' => true,
                'tva_number' => true,
                'address' => true,
                'postcode' => true,
                'city' => true,
                'country_id' => true,
                'users' => true,
                'username' => true,
                'origin' => true
            ],
            '[dirty]' => [
                'email' => true,
                'phone' => true,
                'postcode' => true,
                'city' => true
            ],
            '[original]' => [
                'email' => '...',
                'phone' => '...',
                'postcode' => '...',
                'city' => '...'
            ],
            '[virtual]' => [],
            '[errors]' => [
                'company' => [
                    'unique' => 'This company name exists already.'
                ]
            ],
            '[repository]' => 'Owners'

        },
....

已添加EDIT patchEntity()调用

$user = $this->Users->patchEntity($site->users[0], [

    'email' => $this->siteDatas['userEmail'],
    'phone' => $this->siteDatas['ownerPhone'],
    'role' => 'owner',
    'active' => 1,
    'extraemails' => $this->siteDatas['extraemails'],
    'owner' => [
        'company' => $this->siteDatas['ownerName'],
        'email' => $this->siteDatas['ownerEmail'],
        'phone' => $this->siteDatas['ownerPhone'],
        'address' => $this->siteDatas['ownerAddress'],
        'postcode' => $this->siteDatas['ownerPostcode'],
        'city' => $this->siteDatas['ownerCity'],
        'country_id' => $this->siteDatas['countryId'],
        'web' => $this->siteDatas['ownerWeb'],
        'origin' => 'sitra',
    ],
],
[
    'validate' => 'import',
    'associated' => [
        'Extraemails',
        'Owners' => [
            'validate' => 'import'
        ]
    ]
]);

if ($user->errors()) {

    // Here is where I get the 'unique' error
}

所以我再次证实表中没有其他记录具有相同的“公司”名称。 正如你在我的帖子开头的debug()中看到的那样,我有一个所有者 - > id,它真的是我想要修改的那个。

这是验证器

public function validationImport(Validator $validator) {
    $validator
        ->add('id', 'valid', ['rule' => 'numeric'])
        ->allowEmpty('id', 'create')
        ->notEmpty('company')
        ->add('company', 'unique', ['rule' => 'validateUnique', 'provider' => 'table', 'message' => __("This company exists already.")])

        ...

            ])
        ;

    return $validator;
}

0 个答案:

没有答案