aws/aws-sdk-php 3.21.6を使用しています。私は、ConditionExpressionがConditionalCheckFailedExceptionエラーを満たしたときにReturnValuesがどのように機能するのかを誤解しているはずです。ReturnValuesパラメータを持つDynamoDB UpdateItemは、失敗したConditionExpressionには何も返しません。
私が期待しているのは、ConditionExpressionが失敗し、ConditionalCheckFailedExceptionがトリガーされ、この例外を受け取り、ReturnValues経由で新しい属性DDにアクセスできることです。
ドキュメントAttributes I'm expecting from ReturnValuesはこれを暗示しているようです。
ただし、テストから、ConditionExpressionがtrueの場合はReturnValuesのみが返され、失敗した場合は返されません。
$response = $client->updateItem([
'TableName' => 'MyTable',
'Key' => [
'customer_url' => [
'S' => 'someurl.com'
],
'customer_platform' => [
'S' => 'some_platform'
]
],
'ExpressionAttributeNames' => [
'#C' => 'createdAt'
],
'ExpressionAttributeValues' => [
':val1' => [
'S' => '2017-01-24T14:15:32'
],
':val2' => [
'S' => '2017-01-24T14:15:30'
]
],
'UpdateExpression' => 'set #C = :val1',
'ConditionExpression' => '#C = :val2', // :val2 originally was 2017-01-24T14:15:30, before attempting to update to 2017-01-24T14:15:32. If I change the field to 2017-01-24T14:15:31, before running this update it will throw the ConditionalCheckFailedException
'ReturnValues' => 'ALL_NEW'
]);