2016-09-04 6 views
0

Ich benutze graphaware/neo4j-PHP-Client 4.5.1 mit Neo4j 3.0.4 auf PHP 5.6.24.So erkennen Sie eine fehlgeschlagene Transaktion in neo4j-php-client

Ich verstehe nicht, wie Sie herausfinden, ob eine Transaktion fehlgeschlagen ist.

Zum Beispiel versuche ich einen Knoten zu löschen, der noch Beziehungen hat. Wenn ich die DELETE in dieser einfachen Abfrage:

$client->run 
(
    'MATCH (node { name: {name} }) DELETE node', 
    [ 'name' => 'Fred' ] 
); 

... bekomme ich diese Ausnahme, die das Verhalten ich erwartet hatte:

[GraphAware\Neo4j\Client\Exception\Neo4jException] 
    org.neo4j.kernel.api.exceptions.ConstraintViolationTransactionFailureException: 
    Cannot delete node<31>, because it still has relationships. 
    To delete this node, you must first delete its relationships. 

Aber wenn ich die gleiche Abfrage innerhalb einer Transaktion wickeln:

$transaction = $client->transaction(); 

$transaction->push 
(
    'MATCH (node { name: {name} }) DELETE node', 
    [ 'name' => 'Fred' ] 
); 

$results = $transaction->commit(); 

foreach ($results as $result) 
{ 
    $summary = $result->summarize(); 
    $stats = $summary->updateStatistics(); 
    printf("Nodes deleted: %d\n", $stats->nodesDeleted()); 
} 

printf("Transaction status: %s\n", $transaction->status()); 

... Neo4j den Knoten nicht löschen, aber ich sehe diese (was darauf hindeutet, Erfolg) anstelle einer Ausnahme:

Nodes deleted: 1 
Transaction status: COMMITED 

Fehle ich etwas, oder ist das ein Fehler? Danke im Voraus!

Antwort

Verwandte Themen