Added count, average, sum, min, max, scalar methods to ActiveQuery.

Added support for scopes defined in AR classes.
This commit is contained in:
Qiang Xue
2013-01-17 19:26:20 -05:00
parent 63bb6efb6e
commit b51d347465
5 changed files with 110 additions and 46 deletions

View File

@ -19,4 +19,9 @@ class Customer extends ActiveRecord
{
return $this->hasMany('Order', array('customer_id' => 'id'))->orderBy('id');
}
public static function active($query)
{
return $query->andWhere('status=1');
}
}

View File

@ -55,10 +55,17 @@ class ActiveRecordTest extends \yiiunit\MysqlTestCase
$this->assertEquals(3, $customer->id);
$this->assertEquals(4, $customer->status2);
// find count
$this->assertEquals(3, Customer::count()->value());
$this->assertEquals(2, Customer::find()->select('COUNT(*)')->where('id=1 OR id=2')->value());
$this->assertEquals(6, Customer::count('SUM(id)')->value());
// find count, sum, average, min, max, scalar
$this->assertEquals(3, Customer::find()->count());
$this->assertEquals(2, Customer::find()->where('id=1 OR id=2')->count());
$this->assertEquals(6, Customer::find()->sum('id'));
$this->assertEquals(2, Customer::find()->average('id'));
$this->assertEquals(1, Customer::find()->min('id'));
$this->assertEquals(3, Customer::find()->max('id'));
$this->assertEquals(3, Customer::find()->select('COUNT(*)')->scalar());
// scope
$this->assertEquals(2, Customer::find()->active()->count());
// asArray
$customer = Customer::find()->where('id=2')->asArray()->one();