Skip to content

Commit

Permalink
Merge pull request #269 from Kuzdo/pullrequest
Browse files Browse the repository at this point in the history
Added findAndModify method to EMongoDocument
  • Loading branch information
Sammaye authored Jul 20, 2016
2 parents 8132792 + 2bcd766 commit 17816e7
Showing 1 changed file with 38 additions and 0 deletions.
38 changes: 38 additions & 0 deletions EMongoDocument.php
Original file line number Diff line number Diff line change
Expand Up @@ -845,6 +845,44 @@ public function findOne($criteria = array(), $fields = array())
return $this->populateRecord($record, true, $project === array() ? false : true);
}

/**
* Find one record, modifies, and returns it.
* @return null|EMongoDocument
*/
public function findAndModify($criteria = array(), $updateDoc = array(), $fields = array(), $options = array())
{
$this->trace(__FUNCTION__);

if ($criteria instanceof EMongoCriteria) {
$criteria = $criteria->getCondition();
}
$c = $this->getDbCriteria();

$criteria = $this->mergeCriteria(isset($c['condition']) ? $c['condition'] : array(), $criteria);
$fields = $this->mergeCriteria(isset($c['project']) ? $c['project'] : array(), $fields);
$options = array_merge($this->getDbConnection()->getDefaultWriteConcern(), $options);

if (YII_DEBUG) {
Yii::trace('Executing findAndModify: { $query: ' . json_encode($criteria) . ', $document: ' . json_encode($updateDoc) . ', $fields: ' . json_encode($fields) . ', $options: ' . json_encode($options) . '}', 'extensions.MongoYii.EMongoDocument');
}

if ($this->getDbConnection()->enableProfiling) {
$token = 'extensions.MongoYii.EMongoDocument.query.' . $this->collectionName() . '.findAndModify({ $query: ' . json_encode($criteria) . ', $document: ' . json_encode($updateDoc) . ', $fields: ' . json_encode($fields) . ', $options: ' . json_encode($options) . '})';
Yii::beginProfile($token, 'extensions.MongoYii.EMongoDocument.findAndModify');
}

$result = $this->getCollection()->findAndModify($criteria, $updateDoc, $fields, $options);

if ($this->getDbConnection()->enableProfiling) {
Yii::enableProfile($token, 'extensions.MongoYii.EMongoDocument.findAndModify');
}

if ($result === null) {
return null;
}
return $this->populateRecord($result, true, $fields === array() ? false : true);
}

/**
* Alias of find
* @param array $criteria
Expand Down

0 comments on commit 17816e7

Please sign in to comment.