@@ -447,6 +449,115 @@ class ActiveRecord extends BaseActiveRecord
}
/**
* @inheritdoc
*
* @param boolean $runValidation whether to perform validation before saving the record.
* If the validation fails, the record will not be inserted into the database.
* @param array $attributeNames list of attribute names that need to be saved. Defaults to null,
* meaning all attributes that are loaded from DB will be saved.
* @param array $options options given in this parameter are passed to elasticsearch
* as request URI parameters. These are among others:
*
* - `routing` define shard placement of this record.
* - `parent` by giving the primaryKey of another record this defines a parent-child relation
* - `timeout` timeout waiting for a shard to become available.
* - `replication` the replication type for the delete/index operation (sync or async).
* - `consistency` the write consistency of the index/delete operation.
* - `refresh` refresh the relevant primary and replica shards (not the whole index) immediately after the operation occurs, so that the updated document appears in search results immediately.
* - `detect_noop` this parameter will become part of the request body and will prevent the index from getting updated when nothing has changed.
*
* Please refer to the [elasticsearch documentation](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/docs-update.html#_parameters_3)
* for more details on these options.
*
* The following parameters are Yii specific:
*
* - `optimistic_locking` set this to `true` to enable optimistic locking, avoid updating when the record has changed since it
* has been loaded from the database. Yii will set the `version` parameter to the value stored in [[version]].
* See the [elasticsearch documentation](http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/optimistic-concurrency-control.html) for details.
*
* Make sure the record has been fetched with a [[version]] before. This is only the case
* for records fetched via [[get()]] and [[mget()]] by default. For normal queries, the `_version` field has to be fetched explicitly.
*
* @return integer|boolean the number of rows affected, or false if validation fails
* or [[beforeSave()]] stops the updating process.
* @throws StaleObjectException if optimistic locking is enabled and the data being updated is outdated.
* @throws InvalidParamException if no [[version]] is available and optimistic locking is enabled.
thrownewInvalidParamException('Unable to use optimistic locking on a record that has no version set. Refer to the docs of ActiveRecord::update() for details.');
}
$options['version']=$this->_version;
unset($options['optimistic_locking']);
}
try{
$result=static::getDb()->createCommand()->update(
static::index(),
static::type(),
$this->getOldPrimaryKey(false),
$values,
$options
);
}catch(Exception$e){
// HTTP 409 is the response in case of failed optimistic locking
* Updates all records whos primary keys are given.
* For example, to change the status to be 1 for all customers whose status is 2:
*
...
...
@@ -572,6 +683,76 @@ class ActiveRecord extends BaseActiveRecord
}
/**
* @inheritdoc
*
* @param array $options options given in this parameter are passed to elasticsearch
* as request URI parameters. These are among others:
*
* - `routing` define shard placement of this record.
* - `parent` by giving the primaryKey of another record this defines a parent-child relation
* - `timeout` timeout waiting for a shard to become available.
* - `replication` the replication type for the delete/index operation (sync or async).
* - `consistency` the write consistency of the index/delete operation.
* - `refresh` refresh the relevant primary and replica shards (not the whole index) immediately after the operation occurs, so that the updated document appears in search results immediately.
*
* Please refer to the [elasticsearch documentation](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/docs-delete.html)
* for more details on these options.
*
* The following parameters are Yii specific:
*
* - `optimistic_locking` set this to `true` to enable optimistic locking, avoid updating when the record has changed since it
* has been loaded from the database. Yii will set the `version` parameter to the value stored in [[version]].
* See the [elasticsearch documentation](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/docs-delete.html#delete-versioning) for details.
*
* Make sure the record has been fetched with a [[version]] before. This is only the case
* for records fetched via [[get()]] and [[mget()]] by default. For normal queries, the `_version` field has to be fetched explicitly.
*
* @return integer|boolean the number of rows deleted, or false if the deletion is unsuccessful for some reason.
* Note that it is possible the number of rows deleted is 0, even though the deletion execution is successful.
* @throws StaleObjectException if optimistic locking is enabled and the data being deleted is outdated.
thrownewInvalidParamException('Unable to use optimistic locking on a record that has no version set. Refer to the docs of ActiveRecord::delete() for details.');
}
$options['version']=$this->_version;
unset($options['optimistic_locking']);
}
try{
$result=static::getDb()->createCommand()->delete(
static::index(),
static::type(),
$this->getOldPrimaryKey(false),
$options
);
}catch(Exception$e){
// HTTP 409 is the response in case of failed optimistic locking
- Bug #5662: Elasticsearch AR updateCounters() now uses explicitly `groovy` script for updating making it compatible with ES >1.3.0 (cebe)
- Bug #6065: `ActiveRecord::unlink()` was failing in some situations when working with relations via array valued attributes (cebe)
- Enh #5758: Allow passing custom options to `ActiveRecord::update()` and `::delete()` including support for routing needed for updating records with parent relation (cebe)