Я использую 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
Я что-то упустил, или это ошибка? Заранее спасибо!
Спасибо,
Это на самом деле ошибка, и я исправил ее в https://github.com/graphaware/neo4j-php-client/commit/af8f01475a3cf63549498449574eb9c4bb8e7254
Версия 4.5.3, включая это исправление, должна появиться на packagist через пару минут.
Пожалуйста, проверьте и сообщите.
Других решений пока нет …