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) - Bug #18648: Fix `yii\web\Request` to properly handle HTTP Basic Auth headers (olegbaturin)
- Enh #18726: Added `yii\helpers\Json::$prettyPrint` (rhertogh) - Enh #18726: Added `yii\helpers\Json::$prettyPrint` (rhertogh)
- Enh #18734: Added `yii\validators\EmailValidator::$enableLocalIDN` (brandonkelly) - 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) - 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) - 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) private function queryValueExists($query, $value)
{ {
if (is_array($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(); 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]; $m->test_val = [2, 3, 4, 5];
$val->validateAttribute($m, 'test_val'); $val->validateAttribute($m, 'test_val');
$this->assertFalse($m->hasErrors('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 // non-existing array
$val = new ExistValidator(['targetAttribute' => 'ref']); $val = new ExistValidator(['targetAttribute' => 'ref']);
$val->allowArray = true; $val->allowArray = true;

Loading…
Cancel
Save