2017-06-09 4 views
0

Pour une raison quelconque, j'obtiens l'erreur suivante:Cloudant CouchDB Mise à jour du document Conflit

Fatal error: Uncaught exception 'PHPOnCouch\Exceptions\CouchConflictException' with message 'Conflict - Document update conflict.

Fatal error: Uncaught exception 'PHPOnCouch\Exceptions\CouchConflictException' with message 'Conflict - Document update conflict. (PUT /u12345/678bb21541f0ed5e67df1a9070000b55 [])' in /.../vendor/popojargo/php-on-couch/src/Exceptions/CouchException.php:74 
Stack trace: 
    #0 /.../vendor/popojargo/php-on-couch/src/CouchClient.php(168): PHPOnCouch\Exceptions\CouchException::factory(Array, 'PUT', '/u12345...', Array) 
    #1 /.../vendor/popojargo/php-on-couch/src/CouchClient.php(582): PHPOnCouch\CouchClient->_queryAndTest('PUT', '/u12345...', Array, Array, Object(stdClass)) 
    #2 /.../test.php(46): PHPOnCouch\CouchClient->storeDoc(Object(stdClass)) 
    #3 /Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Res in /.../vendor/popojargo/php-on-couch/src/Exceptions/CouchException.php on line 74 

éleminez la révision donc je ne sais pas pourquoi le reste un conflit de mise à jour du document se produirait.

Quelqu'un a-t-il un aperçu de cela? Ce serait vivement apprécié.

Les objets ressemblent à ce

{ 
    "_id": "678bb21541f0ed5e67df1a9070000b55", 
    "_rev": "3-c0ea1980545a80839677d658eec0df78", 
    "name": "Other", 
    "timestamp": 0 
} 

Mon code

$userClient = new CouchClient("http://admin:[email protected]:8080", "u12345"); 

$all_documents = $userClient->include_docs(TRUE)->getAllDocs(); 

foreach ($all_documents->rows as $d) { 
    $doc = $d->doc; 

    unset($doc->_rev); 
    $doc->timestamp = 0; 
    $userClient->storeDoc($doc); 
} 

Répondre

0

Lorsque vous mettez à jour un document, vous devez fournir les _id. Si ce document existe déjà, vous devez fournir le _rev. Lorsque vous supprimez le _rev de la copie locale de votre document, la mise à jour entraîne l'apparition d'un conflit. Pourquoi? Vous avez fourni un document sans _rev et ils s'attendent à ce que vous fournissiez le dernier _rev pour vous confirmer que ce sera la prochaine version.

+0

Cela a beaucoup de sens, merci pour l'explication! – bryan