2014-11-21 1 views
2

Я новичок в neo4j и в настоящее время использую библиотеку Neo4jphp с cypher для хранения и извлечения узлов. Моя логика довольно проста. Я хочу получить узел (post) и получить все его (количество понравившихся) и все комментарии (узлы) со своими комментаторами (узлами пользователя ярлыка) и иметь возможность анализировать ResultSet в php-массиве, чтобы позднее кодировать его Json.использовать neo4jphp, чтобы получать сообщения пользователей, с симпатиями и комментариями

шифровальщиком заявление я использую:

MATCH (user:User)-[:POSTED]->(post) WHERE post.UserID = '13' AND id(post)=106 OPTIONAL MATCH()-   [rel:LIKES]-(post) OPTIONAL MATCH (post)-[:HAS]-(comment:Comment)<-[:COMMENTED]-(commenter:User) RETURN user, post,count(rel) AS Likes, rel, comment, commenter 

Матч извлекает все узлы правильно (этот пост не имеет аналогов, хотя):

Neo4j http://bookintransit.com/kkk.PNG

Как получить правильный представление этого графика с использованием библиотеки? Также обратите внимание, что для простоты я получил в этом примере один пост-узел (id: 106). Но я хотел бы получить список сообщений, когда я использую код в своем приложении.

Это код PHP Я использую:

$queryString = "MATCH (user:User)-[:POSTED]->(post) WHERE post.UserID = {qUser} OPTIONAL MATCH()-[rel:LIKES]-(post) OPTIONAL MATCH (post)-[:HAS]-(comment:Comment)<-[:COMMENTED]-(commenter:User) RETURN user, post,count(rel) AS Likes, rel, comment, commenter ORDER BY post.TS DESC LIMIT ".$NumberOfPosts; 
     $query = new Everyman\Neo4j\Cypher\Query($client, $queryString, array('qUser' => $UserID)); 
     $result = $query->getResultSet(); 
     if(count($result)>0){ 
      foreach($result AS $row){ 

       // How do I get the correct graph in a php array to parse to json 
      } 

ответ

1

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

match (u:User {name: "13})-[:POSTED]-(p:Post) 
with p 
optional match (p)-[:HAS]-(c:Comment)-(u:User) 
optional match (p)-[:HAS]-(l:Like) 
with p 
, [c, u] as comment 
, count(l) as likes 
return p, collect(comment), likes 
1

С neo4jphp Я понятия не имею, возможно ли это. Кстати, можно с neoclient:

NeoClient использовать форматчик ответа обработки содержания данных графа результат, так что вы получите в результате объект, что ваш график выглядит как на изображении вы публикуемое:

$result = $client->sendCypherQuery($yourQuery, $parameters); 

$posts = $result->getNodes('Post'); 
$post = $result->getSingleNode('Post'); 
$comments = $post->getInboundRelationships('HAS'); 
foreach ($comments->getEndNode() as $comment) { 
    echo $comment->getProperty('text'); 
    $user = $comment->getSingleRelationship('COMMENTED')->getEndNode(); 
    echo $user->getProperty('username'); 
} 

Как вы можете см., набор результатов - это всего лишь графическое представление вашего ответа, вам просто нужно пройтись по нему.