public function testUpdateExpected() { $id = intval(getenv('ITEM_ID')); $item = new Item(getenv('DY_TABLE')); $item['id'] = $id; $item['name'] = 'test'; $item['strings'] = array('test1', 'test2'); $item['numbers'] = array(4, 5, 6); $this->conn->put($item); $expected = new Expected(); $expected['name'] = new ExpectedAttribute('test'); $expected['non_existent'] = new ExpectedAttribute(false); $context = new Context\Update(); $context->setExpected($expected); $context->setReturnValues(ReturnValue::UPDATED_NEW); $update = new \Riverline\DynamoDB\AttributeUpdate(); $update['name'] = new UpdateAction(AttributeAction::PUT, 'new name'); $update['strings'] = new UpdateAction(AttributeAction::ADD, array('test3')); $update['numbers'] = new UpdateAction(AttributeAction::DELETE); $attributes = $this->conn->update(getenv('DY_TABLE'), $id, null, $update, $context); $this->assertNotNull($attributes); }
/** * Update an item via the update_item call * @param string $table The item table * @param mixed $hash The primary hash key * @param mixed|null $range The primary range key * @param AttributeUpdate $update * @param Context\Update|null $context The call context * @return array|null * @throws Exception\AttributesException */ public function update($table, $hash, $range = null, AttributeUpdate $update, Context\Update $context = null) { if (null !== $this->logger) { $this->log('Update on table' . $table); } // Primary key $hash = new Attribute($hash); $key = array('HashKeyElement' => $hash->getForDynamoDB()); // Range key if (null !== $range) { $range = new Attribute($range); $key['RangeKeyElement'] = $range->getForDynamoDB(); } $attributes = array(); foreach ($update as $name => $attribute) { /** @var $attribute Attribute */ $attributes[$name] = $attribute->getForDynamoDB(); } $parameters = array('TableName' => $table, 'Key' => $key, 'AttributeUpdates' => $attributes); if (null !== $context) { $parameters += $context->getForDynamoDB(); } if (null !== $this->logger) { $this->log('Update request paramaters : ' . print_r($parameters, true), Logger::DEBUG); } $response = $this->connector->updateItem($parameters); if (null !== $this->logger) { $this->log('Update request response : ' . print_r($response, true), Logger::DEBUG); } // Update write counter $this->addConsumedWriteUnits($table, floatval($response['ConsumedCapacityUnits'])); return $this->populateAttributes($response); }