使用neo4jphp获取用户帖子,包括赞和评论

时间:2014-11-21 13:19:48

标签: php json neo4j neo4jphp

我是neo4j的新手,目前正在使用带有cypher的Ne​​o4jphp库来存储和检索节点。我的逻辑非常简单。我想获得一个节点(post)并获得所有喜欢(喜欢的数量)和所有评论(节点)及其评论者(标签用户的节点),并能够解析php数组中的ResultSet以便稍后将其编码为JSON。

我正在使用的密码语句是:

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
            }

2 个答案:

答案 0 :(得分: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 :(得分:1)

使用neo4jphp我不知道它是否可行。 BTW可以使用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');
}

正如您所看到的,结果集只是您的响应的图形表示,您只需要浏览它。