2017-01-14 3 views
1

У меня есть простая маленькая таблица, которую я просто хочу обновить. Проводили часы в документах и ​​проверяли вещи, не могу понять это.DynamoDB PHP update-item

Мой стол:

|environment |who| 
------------------- 
|ax   |tom| 

Первичный ключ на «окружающую среду»

Все, что я хочу сделать, это установить «кто» в «Бен», где «окружающая среда» = «топор».

Я пробовал как старый способ делать вещи, так и способ выражения. Я также попробовал как квадратные скобки, обозначенные AWS, используемыми в своих документах, так и массив() нотации php. Ниже приведены некоторые из способов, которыми я пытался это сделать.

1:

$result = $client->updateItem(array(
    'ConditionExpression' => 'environment = :env', 
    'ExpressionAttributeValues' => array(
     ':env' => array(
      'S' => 'environment' 
     ), 
     ':who' => array(
      'S' => $who 
     ) 
    ), 
    'Key' => array(// REQUIRED 
     ':env' => array(
      'S' => $env 
     ) 
    ), 
    'ReturnValues' => 'UPDATED_NEW', 
    'TableName' => 'areas', 
    'UpdateExpression' => 'SET who = :who' 
)); 

2:

$result = $client->updateItem([ 
    'ConditionExpression' => 'environment = :env', 
    'ExpressionAttributeValues' => [ 
     ':env' => [ 
      'S' => 'environment' 
     ], 
     ':who' => [ 
      'S' => $who 
     ] 
    ], 
    'Key' => [ 
     ':env' => [ 
      'S' => $env 
     ] 
    ], 
    'ReturnValues' => 'UPDATED_NEW', 
    'TableName' => 'areas', 
    'UpdateExpression' => 'SET who = :who' 
]); 

3:

$result = $client->updateItem(array(
    'AttributeUpdates' => array(
     'who' => array(
      'Action' => 'PUT', 
      'Value' => array(
       'S' => $who 
      ) 
     ) 
    ), 
    'Key' => array(
     'environment' => array(
      'S' => $env 
     ) 
    ), 
    'TableName' => 'areas' 
)); 

Edit: Это ошибка, я получаю:

SerializationException (client): Start of list found where not expected - {"__type":"com.amazon.coral.service#SerializationException","Message":"Start of list found where not expected"}' 

Любая помощь с этим очень ценится.

+0

Какие сообщения об ошибках вы получаете? Ваш пост читается как заявление, а не вопрос. Какая проблема? –

+0

@MarkB Я обновил сообщение, чтобы теперь включить сообщение об ошибке, которое я получаю. Я получаю ту же ошибку с каждым из различных способов, я пытаюсь это сделать. –

ответ

1

У меня возникла аналогичная проблема. Это код, который я использовал, и он работал.

$RegID = "abracadabra"; 
$tableName="DefaultDelivery"; 
$marshaler = new Marshaler(); 

$requested_delivery = '{"Packet0":{"PacketNo":"2","Quantity":"1000ml","Type":"Toned Milk"},"Packet2":{"PacketNo":"4","Quantity":"250ml","Type":"Toned Milk"}}'; 

$eav = $marshaler->marshalJson(' 
{ 
":RequestedDelivery" : '.$requested_delivery.' 
} 
'); 

$key = $marshaler->marshalJson('            
    {                   
     "RegistrationID" : "'.$RegID.'" 
    }                   
'); 

$params = [ 
    'TableName' => "$tableName", 
    'Key' => $key, 
    'ExpressionAttributeValues' => $eav, 
    'UpdateExpression' => 'SET RequestedDelivery = :RequestedDelivery', 
    'ReturnValues' => 'UPDATED_NEW' 
]; 

try { 
    $result = $client->updateItem($params); 
     echo "SUCCESS"; 
} 
catch (DynamoDbException $e){ 
    echo "Unable to update Item : \n"; 
} 
+0

Я убил этот проект некоторое время назад, так как это был побочный проект для работы, и он никогда не получал тягу. У меня больше нет кода и среды, в которой он работает. Я не уверен, разрешено ли мне это делать, но я возьму ваше слово за решение и отметю его как правильное. –

Смежные вопросы