Browse Source

Fix #18756: Fix `\yii\validators\ExistValidator::queryValueExists` to validate against an array of unique values

tags/2.0.43
DrDeath72 3 years ago committed by GitHub
parent
commit
be1b98b1df
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 1
      framework/CHANGELOG.md
  2. 2
      framework/validators/ExistValidator.php
  3. 7
      tests/framework/validators/ExistValidatorTest.php

1
framework/CHANGELOG.md

@ -19,6 +19,7 @@ Yii Framework 2 Change Log
- Bug #18648: Fix `yii\web\Request` to properly handle HTTP Basic Auth headers (olegbaturin)
- Enh #18726: Added `yii\helpers\Json::$prettyPrint` (rhertogh)
- Enh #18734: Added `yii\validators\EmailValidator::$enableLocalIDN` (brandonkelly)
- Bug #18756: Fix `\yii\validators\ExistValidator::queryValueExists` to validate against an array of unique values (DrDeath72)
- Enh #18656: Added ability for `yii serve`'s `--router` param to take an alias (markhuot)
- Bug #18274: Fix `yii\log\Logger` to calculate profile timings no matter the value of the flush interval (bizley)

2
framework/validators/ExistValidator.php

@ -280,7 +280,7 @@ class ExistValidator extends Validator
private function queryValueExists($query, $value)
{
if (is_array($value)) {
return $query->count("DISTINCT [[$this->targetAttribute]]") == count($value) ;
return $query->count("DISTINCT [[$this->targetAttribute]]") == count(array_unique($value)) ;
}
return $query->exists();
}

7
tests/framework/validators/ExistValidatorTest.php

@ -97,6 +97,13 @@ abstract class ExistValidatorTest extends DatabaseTestCase
$m->test_val = [2, 3, 4, 5];
$val->validateAttribute($m, 'test_val');
$this->assertFalse($m->hasErrors('test_val'));
// existing non-unique array
$val = new ExistValidator(['targetAttribute' => 'ref']);
$val->allowArray = true;
$m = new ValidatorTestRefModel();
$m->test_val = [2, 2, 3, 3, 4, 4, 5, 5];
$val->validateAttribute($m, 'test_val');
$this->assertFalse($m->hasErrors('test_val'));
// non-existing array
$val = new ExistValidator(['targetAttribute' => 'ref']);
$val->allowArray = true;

Loading…
Cancel
Save