2017-09-19 2 views
0

Ich verwende batchGetItem Methode zum Abrufen x von Elementen und ProjectionExpression zum Abrufen x Attribute jedes Elements verwenden.Reservierte Wörter in DynamoDB mit AWS SDK PHP

$result = $client->batchGetItem(array(
    'RequestItems' => array(
     $table => array(
      'Keys' => $keys, 
      'ConsistentRead' => true, 
      'ProjectionExpression' => "id, name" 
     ), 
    ), 
)); 
$read_items = $result->getPath("Responses/{$table}"); 

Allerdings haben einige meiner Artikel Attribute wie name und token die Worte in DynamoDB reserviert sind.

http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ReservedWords.html

{"__type":"com.amazon.coral.validate#ValidationException","message":"Invalid ProjectionExpression: Attribute name is a r (truncated...) 
ValidationException (client): Invalid ProjectionExpression: Attribute name is a reserved keyword; reserved keyword: name - {"__type":"com.amazon.coral.validate#ValidationException","message":"Invalid ProjectionExpression: Attribute name is a reserved keyword; reserved keyword: name"} 
Filename: /var/app/vendor/aws/aws-sdk-php/src/WrappedHttpHandler.php 

Was verstehe ich expression attribute name ist die soultion für diese, aber ich kämpfen, um den Weg zu finden, es batchGetItem zu tun, kann jemand bitte ein kleines Beispiel geben, wie es zu tun SDK mit PHP Version 3.20.11?

Antwort

1

Hier ist ein Beispiel für .

"#name" - ist der Platzhalter für Attributname und der tatsächliche Attributname wird durch den Wert in ersetzt.

$result = $client->batchGetItem(array(
    'RequestItems' => array(
     $table => array(
      'Keys' => $keys, 
      'ConsistentRead' => true, 
      'ProjectionExpression' => "id, #name", 
      'ExpressionAttributeNames' => array('#name' => 'name'} 
     ), 
    ), 
)); 

Siehe link

+0

vielen Dank :) – Berlin

Verwandte Themen