Browse Source

Unsupported "update counters" feature removed from Sphinx Active Record.

tags/2.0.0-beta
Paul Klimov 11 years ago
parent
commit
37862b6ee2
  1. 58
      extensions/sphinx/ActiveRecord.php
  2. 23
      tests/unit/extensions/sphinx/ActiveRecordTest.php

58
extensions/sphinx/ActiveRecord.php

@ -177,34 +177,6 @@ class ActiveRecord extends Model
} }
/** /**
* Updates the whole table using the provided counter changes and conditions.
* For example, to increment all customers' age by 1,
*
* ~~~
* Customer::updateAllCounters(['age' => 1]);
* ~~~
*
* @param array $counters the counters to be updated (attribute name => increment value).
* Use negative values if you want to decrement the counters.
* @param string|array $condition the conditions that will be put in the WHERE part of the UPDATE SQL.
* Please refer to [[Query::where()]] on how to specify this parameter.
* @param array $params the parameters (name => value) to be bound to the query.
* Do not name the parameters as `:bp0`, `:bp1`, etc., because they are used internally by this method.
* @return integer the number of rows updated
*/
public static function updateAllCounters($counters, $condition = '', $params = [])
{
$n = 0;
foreach ($counters as $name => $value) {
$counters[$name] = new Expression("[[$name]]+:bp{$n}", [":bp{$n}" => $value]);
$n++;
}
$command = static::getDb()->createCommand();
$command->update(static::indexName(), $counters, $condition, $params);
return $command->execute();
}
/**
* Deletes rows in the table using the provided conditions. * Deletes rows in the table using the provided conditions.
* WARNING: If you do not specify any condition, this method will delete ALL rows in the table. * WARNING: If you do not specify any condition, this method will delete ALL rows in the table.
* *
@ -813,36 +785,6 @@ class ActiveRecord extends Model
} }
/** /**
* Updates one or several counter columns for the current AR object.
* Note that this method differs from [[updateAllCounters()]] in that it only
* saves counters for the current AR object.
*
* An example usage is as follows:
*
* ~~~
* $post = Post::find($id);
* $post->updateCounters(['view_count' => 1]);
* ~~~
*
* @param array $counters the counters to be updated (attribute name => increment value)
* Use negative values if you want to decrement the counters.
* @return boolean whether the saving is successful
* @see updateAllCounters()
*/
public function updateCounters($counters)
{
if ($this->updateAllCounters($counters, $this->getOldPrimaryKey(true)) > 0) {
foreach ($counters as $name => $value) {
$this->_attributes[$name] += $value;
$this->_oldAttributes[$name] = $this->_attributes[$name];
}
return true;
} else {
return false;
}
}
/**
* Deletes the table row corresponding to this active record. * Deletes the table row corresponding to this active record.
* *
* This method performs the following steps in order: * This method performs the following steps in order:

23
tests/unit/extensions/sphinx/ActiveRecordTest.php

@ -161,35 +161,12 @@ class ActiveRecordTest extends SphinxTestCase
$record2 = RuntimeIndex::find(['id' => 2]); $record2 = RuntimeIndex::find(['id' => 2]);
$this->assertEquals(9, $record2->type_id); $this->assertEquals(9, $record2->type_id);
// updateCounters
/*$pk = ['id' => 1];
$record = RuntimeIndex::find($pk);
$this->assertEquals(1, $record->quantity);
$ret = $record->updateCounters(['quantity' => -1]);
$this->assertTrue($ret);
$this->assertEquals(0, $record->quantity);
$record = RuntimeIndex::find($pk);
$this->assertEquals(0, $record->quantity);*/
// updateAll // updateAll
$pk = ['id' => 2]; $pk = ['id' => 2];
$ret = RuntimeIndex::updateAll(['type_id' => 55], $pk); $ret = RuntimeIndex::updateAll(['type_id' => 55], $pk);
$this->assertEquals(1, $ret); $this->assertEquals(1, $ret);
$record = RuntimeIndex::find($pk); $record = RuntimeIndex::find($pk);
$this->assertEquals(55, $record->type_id); $this->assertEquals(55, $record->type_id);
// updateAllCounters
/*$pk = ['order_id' => 1, 'item_id' => 2];
$record = RuntimeIndex::find($pk);
$this->assertEquals(2, $record->quantity);
$ret = RuntimeIndex::updateAllCounters([
'quantity' => 3,
'subtotal' => -10,
], $pk);
$this->assertEquals(1, $ret);
$record = RuntimeIndex::find($pk);
$this->assertEquals(5, $record->quantity);
$this->assertEquals(30, $record->subtotal);*/
} }
/** /**

Loading…
Cancel
Save