neo4j / Everyman — как передать строковый параметр?

Я пытаюсь передать строковое значение для параметра следующим образом:

$names = array( 'test0', 'test1', 'test2' );
$q0 = "match (n:label0 { id: '{param0}'}) return n";
foreach( $names as $name )
{
$q1 = new Everyman\Neo4j\Cypher\Query( $connection, $q0, array( 'param0' => $name );
$r = $q1->getResultSet();

echo( var_dump( $r ));
}

Запуск этого кода дает мне 3 var_dump выходы без набора результатов. Если я подставлю фактическое значение параметра (вместо того, чтобы получить его из массива), я получу ожидаемый набор результатов. Точно так же, если я ввожу запрос, используя оболочку Neo4j, я получаю ожидаемые значения.

Так что я делаю не так? Я уверен, что я использую это неправильно, но я не понимаю, как.

Я могу поместить переменную напрямую, и запрос также работает (хотя это сводит на нет любую возможную выгоду от использования параметров где-либо еще в запросе). Это просто делает это с помощью параметра, который кажется проблематичным.


РЕДАКТИРОВАТЬ:

  • neo4j v2.1.4

0

Решение

$q0 = "match (n:label0 { id: {param0}}) return n";

что произойдет, если вы сделаете это? Удалить одинарные кавычки?

Вы также можете переписать свой запрос на:

и передать весь массив строк в качестве параметра

$names = array( 'test0', 'test1', 'test2' );
$q0 = "match (n:label0) WHERE n.id IN {param0} return n";
$q1 = new Everyman\Neo4j\Cypher\Query( $connection, $q0, array( 'param0' => $names );

также убедитесь, что create index on :label0(name)

0

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

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