Как обнаружить неудачную транзакцию в neo4j-php-клиенте

Я использую graphaware / neo4j-php-client 4.5.1 с Neo4j 3.0.4 на PHP 5.6.24.

Я не понимаю, как узнать, произошла ли транзакция.

Например, я пытаюсь удалить узел, который все еще имеет отношения. Если я запускаю DELETE в этом простом запросе:

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

… Я получаю это исключение, такое поведение, которое я ожидал:

[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.

Но когда я заключаю тот же запрос в транзакцию:

$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 не удаляет узел, но я вижу это (предполагающий успех) вместо исключения:

Nodes deleted: 1
Transaction status: COMMITED

Я что-то упустил, или это ошибка? Заранее спасибо!

0

Решение

Спасибо,

Это на самом деле ошибка, и я исправил ее в https://github.com/graphaware/neo4j-php-client/commit/af8f01475a3cf63549498449574eb9c4bb8e7254

Версия 4.5.3, включая это исправление, должна появиться на packagist через пару минут.

Пожалуйста, проверьте и сообщите.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]