Commit 0e143338 by Qiang Xue

Finished refactoring find() .

parent b7d6f614
...@@ -169,10 +169,9 @@ $customers = Customer::findBySql($sql)->all(); ...@@ -169,10 +169,9 @@ $customers = Customer::findBySql($sql)->all();
use meaningful constant names rather than hardcoded strings or numbers in your code. use meaningful constant names rather than hardcoded strings or numbers in your code.
There is a shortcut method `findOne()` that allows you to retrieve an Active Record instance based on a primary Two shortcut methods are provided to return Active Record instances matching a primary key value or a set of
key value or a set of column values. The main difference here is that instead of returning a [[yii\db\ActiveQuery]] column values: `findOne()` and `findAll()`. The former returns the first matching instance while the latter
instance, the method takes the column value(s) and returns an Active Record instance directly without the need returns all of them. For example,
to call `one()`.
```php ```php
// to return a single customer whose ID is 1: // to return a single customer whose ID is 1:
...@@ -183,6 +182,14 @@ $customer = Customer::findOne([ ...@@ -183,6 +182,14 @@ $customer = Customer::findOne([
'id' => 1, 'id' => 1,
'status' => Customer::STATUS_ACTIVE, 'status' => Customer::STATUS_ACTIVE,
]); ]);
// to return customers whose ID is 1, 2 or 3:
$customers = Customer::findAll([1, 2, 3]);
// to return customers whose status is "deleted":
$customer = Customer::findAll([
'status' => Customer::STATUS_DELETED,
]);
``` ```
......
...@@ -10,6 +10,7 @@ namespace yii\elasticsearch; ...@@ -10,6 +10,7 @@ namespace yii\elasticsearch;
use yii\base\InvalidCallException; use yii\base\InvalidCallException;
use yii\base\InvalidConfigException; use yii\base\InvalidConfigException;
use yii\db\BaseActiveRecord; use yii\db\BaseActiveRecord;
use yii\helpers\ArrayHelper;
use yii\helpers\Inflector; use yii\helpers\Inflector;
use yii\helpers\Json; use yii\helpers\Json;
use yii\helpers\StringHelper; use yii\helpers\StringHelper;
...@@ -73,13 +74,26 @@ class ActiveRecord extends BaseActiveRecord ...@@ -73,13 +74,26 @@ class ActiveRecord extends BaseActiveRecord
/** /**
* @inheritdoc * @inheritdoc
*/ */
public static function findOne($condtion) public static function findOne($condition)
{ {
$query = static::find(); $query = static::find();
if (is_array($condtion)) { if (is_array($condition)) {
return $query->andWhere($condtion)->one(); return $query->andWhere($condition)->one();
} else { } else {
return static::get($condtion); return static::get($condition);
}
}
/**
* @inheritdoc
*/
public static function findAll($condition)
{
$query = static::find();
if (ArrayHelper::isAssociative($condition)) {
return $query->andWhere($condition)->all();
} else {
return static::mget((array) $condition);
} }
} }
...@@ -120,14 +134,18 @@ class ActiveRecord extends BaseActiveRecord ...@@ -120,14 +134,18 @@ class ActiveRecord extends BaseActiveRecord
* *
* Please refer to the [elasticsearch documentation](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/docs-get.html) * Please refer to the [elasticsearch documentation](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/docs-get.html)
* for more details on these options. * for more details on these options.
* @return static|null The record instance or null if it was not found. * @return array The record instances, or empty array if nothing was found
*/ */
public static function mget(array $primaryKeys, $options = [])
public static function mget($primaryKeys, $options = [])
{ {
if (empty($primaryKeys)) { if (empty($primaryKeys)) {
return []; return [];
} }
if (count($primaryKeys) === 1) {
$model = static::get(reset($primaryKeys));
return $model === null ? [] : [$model];
}
$command = static::getDb()->createCommand(); $command = static::getDb()->createCommand();
$result = $command->mget(static::index(), static::type(), $primaryKeys, $options); $result = $command->mget(static::index(), static::type(), $primaryKeys, $options);
$models = []; $models = [];
......
...@@ -423,7 +423,7 @@ abstract class ActiveRecord extends BaseActiveRecord ...@@ -423,7 +423,7 @@ abstract class ActiveRecord extends BaseActiveRecord
* For example, to update an article record: * For example, to update an article record:
* *
* ~~~ * ~~~
* $article = Article::find(['id' => $id]); * $article = Article::findOne($id);
* $article->genre_id = $genreId; * $article->genre_id = $genreId;
* $article->group_id = $groupId; * $article->group_id = $groupId;
* $article->update(); * $article->update();
......
...@@ -114,27 +114,44 @@ interface ActiveRecordInterface ...@@ -114,27 +114,44 @@ interface ActiveRecordInterface
* This method is also called by [[BaseActiveRecord::hasOne()]] and [[BaseActiveRecord::hasMany()]] to * This method is also called by [[BaseActiveRecord::hasOne()]] and [[BaseActiveRecord::hasMany()]] to
* create a relational query. * create a relational query.
* *
* You may override this method to return a customized query (e.g. `CustomerQuery` specified * You may override this method to return a customized query. For example,
* written for querying `Customer` purpose.)
* *
* You may also define default conditions that should apply to all queries unless overridden: * ```php
* class Customer extends ActiveRecord
* {
* public static function find()
* {
* // use CustomerQuery instead of the default ActiveQuery
* return new CustomerQuery(get_called_class());
* }
* }
* ```
*
* The following code shows how to apply a default condition for all queries:
* *
* ```php * ```php
* class Customer extends ActiveRecord
* {
* public static function find() * public static function find()
* { * {
* return parent::find()->where(['deleted' => false]); * return parent::find()->where(['deleted' => false]);
* } * }
* ``` * }
*
* // Use andWhere()/orWhere() to apply the default condition
* // SELECT FROM customer WHERE `deleted`=:deleted AND age>30
* $customers = Customer::find()->andWhere('age>30')->all();
* *
* Note that all queries should use [[Query::andWhere()]] and [[Query::orWhere()]] to keep the * // Use where() to ignore the default condition
* default condition. Using [[Query::where()]] will override the default condition. * // SELECT FROM customer WHERE age>30
* $customers = Customer::find()->where('age>30')->all();
* *
* @return ActiveQueryInterface the newly created [[ActiveQueryInterface|ActiveQuery]] instance. * @return ActiveQueryInterface the newly created [[ActiveQueryInterface|ActiveQuery]] instance.
*/ */
public static function find(); public static function find();
/** /**
* Returns a single active record model instance given a primary key or an array of column values. * Returns a single active record model instance by a primary key or an array of column values.
* *
* The method accepts: * The method accepts:
* *
...@@ -143,7 +160,7 @@ interface ActiveRecordInterface ...@@ -143,7 +160,7 @@ interface ActiveRecordInterface
* - an array of name-value pairs: query by a set of attribute values and return a single record * - an array of name-value pairs: query by a set of attribute values and return a single record
* matching all of them (or null if not found). * matching all of them (or null if not found).
* *
* Note that in this case, the method will automatically call the `one()` method and return an * Note that this method will automatically call the `one()` method and return an
* [[ActiveRecordInterface|ActiveRecord]] instance. For example, * [[ActiveRecordInterface|ActiveRecord]] instance. For example,
* *
* ```php * ```php
...@@ -153,7 +170,7 @@ interface ActiveRecordInterface ...@@ -153,7 +170,7 @@ interface ActiveRecordInterface
* // the above code is equivalent to: * // the above code is equivalent to:
* $customer = Customer::find()->where(['id' => 10])->one(); * $customer = Customer::find()->where(['id' => 10])->one();
* *
* // find a single customer whose age is 30 and whose status is 1 * // find the first customer whose age is 30 and whose status is 1
* $customer = Customer::findOne(['age' => 30, 'status' => 1]); * $customer = Customer::findOne(['age' => 30, 'status' => 1]);
* *
* // the above code is equivalent to: * // the above code is equivalent to:
...@@ -161,11 +178,49 @@ interface ActiveRecordInterface ...@@ -161,11 +178,49 @@ interface ActiveRecordInterface
* ``` * ```
* *
* @param mixed $condition primary key value or a set of column values * @param mixed $condition primary key value or a set of column values
* @return static ActiveRecord instance or null if nothing matched * @return static ActiveRecord instance matching the condition, or null if nothing matches.
*/ */
public static function findOne($condition); public static function findOne($condition);
/** /**
* Returns a list of active record models that match the specified primary key value or a set of column values.
*
* The method accepts:
*
* - a scalar value (integer or string): query by a single primary key value and return the
* corresponding record (or null if not found).
* - an array of name-value pairs: query by a set of attribute values and return a single record
* matching all of them (or null if not found).
*
* Note that this method will automatically call the `all()` method and return an array of
* [[ActiveRecordInterface|ActiveRecord]] instances. For example,
*
* ```php
* // find the customers whose primary key value is 10
* $customers = Customer::findAll(10);
*
* // the above code is equivalent to:
* $customers = Customer::find()->where(['id' => 10])->all();
*
* // find the customers whose primary key value is 10, 11 or 12.
* $customers = Customer::findAll([10, 11, 12]);
*
* // the above code is equivalent to:
* $customers = Customer::find()->where(['id' => [10, 11, 12]])->all();
*
* // find customers whose age is 30 and whose status is 1
* $customers = Customer::findOne(['age' => 30, 'status' => 1]);
*
* // the above code is equivalent to:
* $customers = Customer::find()->where(['age' => 30, 'status' => 1])->all();
* ```
*
* @param mixed $condition primary key value or a set of column values
* @return array an array of ActiveRecord instance, or an empty array if nothing matches.
*/
public static function findAll($condition);
/**
* Updates records using the provided attribute values and conditions. * Updates records using the provided attribute values and conditions.
* For example, to change the status to be 1 for all customers whose status is 2: * For example, to change the status to be 1 for all customers whose status is 2:
* *
...@@ -208,7 +263,7 @@ interface ActiveRecordInterface ...@@ -208,7 +263,7 @@ interface ActiveRecordInterface
* For example, to save a customer record: * For example, to save a customer record:
* *
* ~~~ * ~~~
* $customer = new Customer; // or $customer = Customer::find($id); * $customer = new Customer; // or $customer = Customer::findOne($id);
* $customer->name = $name; * $customer->name = $name;
* $customer->email = $email; * $customer->email = $email;
* $customer->save(); * $customer->save();
...@@ -249,7 +304,7 @@ interface ActiveRecordInterface ...@@ -249,7 +304,7 @@ interface ActiveRecordInterface
* Usage example: * Usage example:
* *
* ```php * ```php
* $customer = Customer::find($id); * $customer = Customer::findOne($id);
* $customer->name = $name; * $customer->name = $name;
* $customer->email = $email; * $customer->email = $email;
* $customer->update(); * $customer->update();
......
...@@ -15,6 +15,7 @@ use yii\base\ModelEvent; ...@@ -15,6 +15,7 @@ use yii\base\ModelEvent;
use yii\base\NotSupportedException; use yii\base\NotSupportedException;
use yii\base\UnknownMethodException; use yii\base\UnknownMethodException;
use yii\base\InvalidCallException; use yii\base\InvalidCallException;
use yii\helpers\ArrayHelper;
/** /**
* ActiveRecord is the base class for classes representing relational data in terms of objects. * ActiveRecord is the base class for classes representing relational data in terms of objects.
...@@ -97,7 +98,7 @@ abstract class BaseActiveRecord extends Model implements ActiveRecordInterface ...@@ -97,7 +98,7 @@ abstract class BaseActiveRecord extends Model implements ActiveRecordInterface
public static function findOne($condition) public static function findOne($condition)
{ {
$query = static::find(); $query = static::find();
if (is_array($condition)) { if (ArrayHelper::isAssociative($condition)) {
// hash condition // hash condition
return $query->andWhere($condition)->one(); return $query->andWhere($condition)->one();
} else { } else {
...@@ -117,15 +118,14 @@ abstract class BaseActiveRecord extends Model implements ActiveRecordInterface ...@@ -117,15 +118,14 @@ abstract class BaseActiveRecord extends Model implements ActiveRecordInterface
public static function findAll($condition) public static function findAll($condition)
{ {
$query = static::find(); $query = static::find();
if (is_array($condition)) { if (ArrayHelper::isAssociative($condition)) {
// hash condition // hash condition
return $query->andWhere($condition)->one(); return $query->andWhere($condition)->all();
} else { } else {
// query by primary key // query by primary key(s)
$primaryKey = static::primaryKey(); $primaryKey = static::primaryKey();
if (isset($primaryKey[0])) { if (isset($primaryKey[0])) {
return $query->andWhere([$primaryKey[0] => $condition])->one(); return $query->andWhere([$primaryKey[0] => $condition])->all();
} else { } else {
throw new InvalidConfigException(get_called_class() . ' must have a primary key.'); throw new InvalidConfigException(get_called_class() . ' must have a primary key.');
} }
...@@ -966,7 +966,7 @@ abstract class BaseActiveRecord extends Model implements ActiveRecordInterface ...@@ -966,7 +966,7 @@ abstract class BaseActiveRecord extends Model implements ActiveRecordInterface
/** /**
* Returns the old primary key value(s). * Returns the old primary key value(s).
* This refers to the primary key value that is populated into the record * This refers to the primary key value that is populated into the record
* after executing a find method (e.g. one(), findOne()). * after executing a find method (e.g. find(), findOne()).
* The value remains unchanged even if the primary key attribute is manually assigned with a different value. * The value remains unchanged even if the primary key attribute is manually assigned with a different value.
* @param boolean $asArray whether to return the primary key value as an array. If true, * @param boolean $asArray whether to return the primary key value as an array. If true,
* the return value will be an array with column name as key and column value as value. * the return value will be an array with column name as key and column value as value.
......
...@@ -504,9 +504,9 @@ class BaseArrayHelper ...@@ -504,9 +504,9 @@ class BaseArrayHelper
* the array to be treated as associative. * the array to be treated as associative.
* @return boolean whether the array is associative * @return boolean whether the array is associative
*/ */
public static function isAssociative(array $array, $allStrings = true) public static function isAssociative($array, $allStrings = true)
{ {
if (empty($array)) { if (!is_array($array) || empty($array)) {
return false; return false;
} }
...@@ -540,8 +540,12 @@ class BaseArrayHelper ...@@ -540,8 +540,12 @@ class BaseArrayHelper
* in order for the array to be treated as indexed. * in order for the array to be treated as indexed.
* @return boolean whether the array is associative * @return boolean whether the array is associative
*/ */
public static function isIndexed(array $array, $consecutive = false) public static function isIndexed($array, $consecutive = false)
{ {
if (!is_array($array)) {
return false;
}
if (empty($array)) { if (empty($array)) {
return true; return true;
} }
......
...@@ -86,16 +86,16 @@ class ActiveRecordTest extends MongoDbTestCase ...@@ -86,16 +86,16 @@ class ActiveRecordTest extends MongoDbTestCase
// find by _id // find by _id
$testId = $this->testRows[0]['_id']; $testId = $this->testRows[0]['_id'];
$customer = CustomerFile::find($testId); $customer = CustomerFile::findOne($testId);
$this->assertTrue($customer instanceof CustomerFile); $this->assertTrue($customer instanceof CustomerFile);
$this->assertEquals($testId, $customer->_id); $this->assertEquals($testId, $customer->_id);
// find by column values // find by column values
$customer = CustomerFile::find(['tag' => 'tag5']); $customer = CustomerFile::findOne(['tag' => 'tag5']);
$this->assertTrue($customer instanceof CustomerFile); $this->assertTrue($customer instanceof CustomerFile);
$this->assertEquals($this->testRows[4]['_id'], $customer->_id); $this->assertEquals($this->testRows[4]['_id'], $customer->_id);
$this->assertEquals('tag5', $customer->tag); $this->assertEquals('tag5', $customer->tag);
$customer = CustomerFile::find(['tag' => 'unexisting tag']); $customer = CustomerFile::findOne(['tag' => 'unexisting tag']);
$this->assertNull($customer); $this->assertNull($customer);
// find by attributes // find by attributes
...@@ -205,7 +205,7 @@ class ActiveRecordTest extends MongoDbTestCase ...@@ -205,7 +205,7 @@ class ActiveRecordTest extends MongoDbTestCase
$record->save(); $record->save();
// save // save
$record = CustomerFile::find($record->_id); $record = CustomerFile::findOne($record->_id);
$this->assertTrue($record instanceof CustomerFile); $this->assertTrue($record instanceof CustomerFile);
$this->assertEquals(7, $record->status); $this->assertEquals(7, $record->status);
$this->assertFalse($record->isNewRecord); $this->assertFalse($record->isNewRecord);
...@@ -214,14 +214,14 @@ class ActiveRecordTest extends MongoDbTestCase ...@@ -214,14 +214,14 @@ class ActiveRecordTest extends MongoDbTestCase
$record->save(); $record->save();
$this->assertEquals(9, $record->status); $this->assertEquals(9, $record->status);
$this->assertFalse($record->isNewRecord); $this->assertFalse($record->isNewRecord);
$record2 = CustomerFile::find($record->_id); $record2 = CustomerFile::findOne($record->_id);
$this->assertEquals(9, $record2->status); $this->assertEquals(9, $record2->status);
// updateAll // updateAll
$pk = ['_id' => $record->_id]; $pk = ['_id' => $record->_id];
$ret = CustomerFile::updateAll(['status' => 55], $pk); $ret = CustomerFile::updateAll(['status' => 55], $pk);
$this->assertEquals(1, $ret); $this->assertEquals(1, $ret);
$record = CustomerFile::find($pk); $record = CustomerFile::findOne($pk);
$this->assertEquals(55, $record->status); $this->assertEquals(55, $record->status);
} }
...@@ -239,13 +239,13 @@ class ActiveRecordTest extends MongoDbTestCase ...@@ -239,13 +239,13 @@ class ActiveRecordTest extends MongoDbTestCase
$record->save(); $record->save();
$updateFileName = __FILE__; $updateFileName = __FILE__;
$record = CustomerFile::find($record->_id); $record = CustomerFile::findOne($record->_id);
$record->setAttribute('file', $updateFileName); $record->setAttribute('file', $updateFileName);
$record->status = 55; $record->status = 55;
$record->save(); $record->save();
$this->assertEquals(file_get_contents($updateFileName), $record->getFileContent()); $this->assertEquals(file_get_contents($updateFileName), $record->getFileContent());
$record2 = CustomerFile::find($record->_id); $record2 = CustomerFile::findOne($record->_id);
$this->assertEquals($record->status, $record2->status); $this->assertEquals($record->status, $record2->status);
$this->assertEquals(file_get_contents($updateFileName), $record2->getFileContent()); $this->assertEquals(file_get_contents($updateFileName), $record2->getFileContent());
$this->assertEquals($record->tag, $record2->tag); $this->assertEquals($record->tag, $record2->tag);
...@@ -265,13 +265,13 @@ class ActiveRecordTest extends MongoDbTestCase ...@@ -265,13 +265,13 @@ class ActiveRecordTest extends MongoDbTestCase
$record->save(); $record->save();
$updateFileContent = 'New updated file content'; $updateFileContent = 'New updated file content';
$record = CustomerFile::find($record->_id); $record = CustomerFile::findOne($record->_id);
$record->setAttribute('newFileContent', $updateFileContent); $record->setAttribute('newFileContent', $updateFileContent);
$record->status = 55; $record->status = 55;
$record->save(); $record->save();
$this->assertEquals($updateFileContent, $record->getFileContent()); $this->assertEquals($updateFileContent, $record->getFileContent());
$record2 = CustomerFile::find($record->_id); $record2 = CustomerFile::findOne($record->_id);
$this->assertEquals($record->status, $record2->status); $this->assertEquals($record->status, $record2->status);
$this->assertEquals($updateFileContent, $record2->getFileContent()); $this->assertEquals($updateFileContent, $record2->getFileContent());
} }
...@@ -292,7 +292,7 @@ class ActiveRecordTest extends MongoDbTestCase ...@@ -292,7 +292,7 @@ class ActiveRecordTest extends MongoDbTestCase
$this->assertTrue($record->writeFile($outputFileName)); $this->assertTrue($record->writeFile($outputFileName));
$this->assertEquals($newFileContent, file_get_contents($outputFileName)); $this->assertEquals($newFileContent, file_get_contents($outputFileName));
$record2 = CustomerFile::find($record->_id); $record2 = CustomerFile::findOne($record->_id);
$outputFileName = $this->getTestFilePath() . DIRECTORY_SEPARATOR . 'out_refreshed.txt'; $outputFileName = $this->getTestFilePath() . DIRECTORY_SEPARATOR . 'out_refreshed.txt';
$this->assertTrue($record2->writeFile($outputFileName)); $this->assertTrue($record2->writeFile($outputFileName));
$this->assertEquals($newFileContent, file_get_contents($outputFileName)); $this->assertEquals($newFileContent, file_get_contents($outputFileName));
...@@ -315,7 +315,7 @@ class ActiveRecordTest extends MongoDbTestCase ...@@ -315,7 +315,7 @@ class ActiveRecordTest extends MongoDbTestCase
fclose($fileResource); fclose($fileResource);
$this->assertEquals($newFileContent, $contents); $this->assertEquals($newFileContent, $contents);
$record2 = CustomerFile::find($record->_id); $record2 = CustomerFile::findOne($record->_id);
$fileResource = $record2->getFileResource(); $fileResource = $record2->getFileResource();
$contents = stream_get_contents($fileResource); $contents = stream_get_contents($fileResource);
fclose($fileResource); fclose($fileResource);
......
...@@ -380,6 +380,7 @@ class ArrayHelperTest extends TestCase ...@@ -380,6 +380,7 @@ class ArrayHelperTest extends TestCase
public function testIsAssociative() public function testIsAssociative()
{ {
$this->assertFalse(ArrayHelper::isAssociative('test'));
$this->assertFalse(ArrayHelper::isAssociative([])); $this->assertFalse(ArrayHelper::isAssociative([]));
$this->assertFalse(ArrayHelper::isAssociative([1, 2, 3])); $this->assertFalse(ArrayHelper::isAssociative([1, 2, 3]));
$this->assertTrue(ArrayHelper::isAssociative(['name' => 1, 'value' => 'test'])); $this->assertTrue(ArrayHelper::isAssociative(['name' => 1, 'value' => 'test']));
...@@ -389,6 +390,7 @@ class ArrayHelperTest extends TestCase ...@@ -389,6 +390,7 @@ class ArrayHelperTest extends TestCase
public function testIsIndexed() public function testIsIndexed()
{ {
$this->assertFalse(ArrayHelper::isIndexed('test'));
$this->assertTrue(ArrayHelper::isIndexed([])); $this->assertTrue(ArrayHelper::isIndexed([]));
$this->assertTrue(ArrayHelper::isIndexed([1, 2, 3])); $this->assertTrue(ArrayHelper::isIndexed([1, 2, 3]));
$this->assertTrue(ArrayHelper::isIndexed([2 => 'a', 3 => 'b'])); $this->assertTrue(ArrayHelper::isIndexed([2 => 'a', 3 => 'b']));
......
...@@ -57,38 +57,38 @@ class ExistValidatorTest extends DatabaseTestCase ...@@ -57,38 +57,38 @@ class ExistValidatorTest extends DatabaseTestCase
{ {
// existing value on different table // existing value on different table
$val = new ExistValidator(['targetClass' => ValidatorTestMainModel::className(), 'targetAttribute' => 'id']); $val = new ExistValidator(['targetClass' => ValidatorTestMainModel::className(), 'targetAttribute' => 'id']);
$m = ValidatorTestRefModel::find(['id' => 1]); $m = ValidatorTestRefModel::findOne(['id' => 1]);
$val->validateAttribute($m, 'ref'); $val->validateAttribute($m, 'ref');
$this->assertFalse($m->hasErrors()); $this->assertFalse($m->hasErrors());
// non-existing value on different table // non-existing value on different table
$val = new ExistValidator(['targetClass' => ValidatorTestMainModel::className(), 'targetAttribute' => 'id']); $val = new ExistValidator(['targetClass' => ValidatorTestMainModel::className(), 'targetAttribute' => 'id']);
$m = ValidatorTestRefModel::find(['id' => 6]); $m = ValidatorTestRefModel::findOne(['id' => 6]);
$val->validateAttribute($m, 'ref'); $val->validateAttribute($m, 'ref');
$this->assertTrue($m->hasErrors('ref')); $this->assertTrue($m->hasErrors('ref'));
// existing value on same table // existing value on same table
$val = new ExistValidator(['targetAttribute' => 'ref']); $val = new ExistValidator(['targetAttribute' => 'ref']);
$m = ValidatorTestRefModel::find(['id' => 2]); $m = ValidatorTestRefModel::findOne(['id' => 2]);
$val->validateAttribute($m, 'test_val'); $val->validateAttribute($m, 'test_val');
$this->assertFalse($m->hasErrors()); $this->assertFalse($m->hasErrors());
// non-existing value on same table // non-existing value on same table
$val = new ExistValidator(['targetAttribute' => 'ref']); $val = new ExistValidator(['targetAttribute' => 'ref']);
$m = ValidatorTestRefModel::find(['id' => 5]); $m = ValidatorTestRefModel::findOne(['id' => 5]);
$val->validateAttribute($m, 'test_val_fail'); $val->validateAttribute($m, 'test_val_fail');
$this->assertTrue($m->hasErrors('test_val_fail')); $this->assertTrue($m->hasErrors('test_val_fail'));
// check for given value (true) // check for given value (true)
$val = new ExistValidator(); $val = new ExistValidator();
$m = ValidatorTestRefModel::find(['id' => 3]); $m = ValidatorTestRefModel::findOne(['id' => 3]);
$val->validateAttribute($m, 'ref'); $val->validateAttribute($m, 'ref');
$this->assertFalse($m->hasErrors()); $this->assertFalse($m->hasErrors());
// check for given defaults (false) // check for given defaults (false)
$val = new ExistValidator(); $val = new ExistValidator();
$m = ValidatorTestRefModel::find(['id' => 4]); $m = ValidatorTestRefModel::findOne(['id' => 4]);
$m->a_field = 'some new value'; $m->a_field = 'some new value';
$val->validateAttribute($m, 'a_field'); $val->validateAttribute($m, 'a_field');
$this->assertTrue($m->hasErrors('a_field')); $this->assertTrue($m->hasErrors('a_field'));
// check array // check array
$val = new ExistValidator(['targetAttribute' => 'ref']); $val = new ExistValidator(['targetAttribute' => 'ref']);
$m = ValidatorTestRefModel::find(['id' => 2]); $m = ValidatorTestRefModel::findOne(['id' => 2]);
$m->test_val = [1,2,3]; $m->test_val = [1,2,3];
$val->validateAttribute($m, 'test_val'); $val->validateAttribute($m, 'test_val');
$this->assertTrue($m->hasErrors('test_val')); $this->assertTrue($m->hasErrors('test_val'));
......
...@@ -35,7 +35,7 @@ class UniqueValidatorTest extends DatabaseTestCase ...@@ -35,7 +35,7 @@ class UniqueValidatorTest extends DatabaseTestCase
$m = ValidatorTestMainModel::find()->one(); $m = ValidatorTestMainModel::find()->one();
$val->validateAttribute($m, 'id'); $val->validateAttribute($m, 'id');
$this->assertFalse($m->hasErrors('id')); $this->assertFalse($m->hasErrors('id'));
$m = ValidatorTestRefModel::find(1); $m = ValidatorTestRefModel::findOne(1);
$val->validateAttribute($m, 'ref'); $val->validateAttribute($m, 'ref');
$this->assertTrue($m->hasErrors('ref')); $this->assertTrue($m->hasErrors('ref'));
// new record: // new record:
...@@ -70,10 +70,10 @@ class UniqueValidatorTest extends DatabaseTestCase ...@@ -70,10 +70,10 @@ class UniqueValidatorTest extends DatabaseTestCase
public function testValidateNonDatabaseAttribute() public function testValidateNonDatabaseAttribute()
{ {
$val = new UniqueValidator(['targetClass' => ValidatorTestRefModel::className(), 'targetAttribute' => 'ref']); $val = new UniqueValidator(['targetClass' => ValidatorTestRefModel::className(), 'targetAttribute' => 'ref']);
$m = ValidatorTestMainModel::find(1); $m = ValidatorTestMainModel::findOne(1);
$val->validateAttribute($m, 'testMainVal'); $val->validateAttribute($m, 'testMainVal');
$this->assertFalse($m->hasErrors('testMainVal')); $this->assertFalse($m->hasErrors('testMainVal'));
$m = ValidatorTestMainModel::find(1); $m = ValidatorTestMainModel::findOne(1);
$m->testMainVal = 4; $m->testMainVal = 4;
$val->validateAttribute($m, 'testMainVal'); $val->validateAttribute($m, 'testMainVal');
$this->assertTrue($m->hasErrors('testMainVal')); $this->assertTrue($m->hasErrors('testMainVal'));
...@@ -94,7 +94,7 @@ class UniqueValidatorTest extends DatabaseTestCase ...@@ -94,7 +94,7 @@ class UniqueValidatorTest extends DatabaseTestCase
'targetAttribute' => ['order_id', 'item_id'], 'targetAttribute' => ['order_id', 'item_id'],
]); ]);
// validate old record // validate old record
$m = OrderItem::find(['order_id' => 1, 'item_id' => 2]); $m = OrderItem::findOne(['order_id' => 1, 'item_id' => 2]);
$val->validateAttribute($m, 'order_id'); $val->validateAttribute($m, 'order_id');
$this->assertFalse($m->hasErrors('order_id')); $this->assertFalse($m->hasErrors('order_id'));
$m->item_id = 1; $m->item_id = 1;
...@@ -114,14 +114,14 @@ class UniqueValidatorTest extends DatabaseTestCase ...@@ -114,14 +114,14 @@ class UniqueValidatorTest extends DatabaseTestCase
'targetAttribute' => ['id' => 'order_id'], 'targetAttribute' => ['id' => 'order_id'],
]); ]);
// validate old record // validate old record
$m = Order::find(1); $m = Order::findOne(1);
$val->validateAttribute($m, 'id'); $val->validateAttribute($m, 'id');
$this->assertTrue($m->hasErrors('id')); $this->assertTrue($m->hasErrors('id'));
$m = Order::find(1); $m = Order::findOne(1);
$m->id = 2; $m->id = 2;
$val->validateAttribute($m, 'id'); $val->validateAttribute($m, 'id');
$this->assertTrue($m->hasErrors('id')); $this->assertTrue($m->hasErrors('id'));
$m = Order::find(1); $m = Order::findOne(1);
$m->id = 10; $m->id = 10;
$val->validateAttribute($m, 'id'); $val->validateAttribute($m, 'id');
$this->assertFalse($m->hasErrors('id')); $this->assertFalse($m->hasErrors('id'));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment