|
|
|
@ -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. |
|
|
|
|
* 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. |
|
|
|
|
* |
|
|
|
|
* This method performs the following steps in order: |
|
|
|
|