在 Symfony 中使用原始 Cypher 查询 Neo4j

Using raw Cypher to query Neo4j in Symfony

我正在尝试完成本教程:http://www.sitepoint.com/adding-social-network-features-php-app-neo4j/ 但是使用 Symfony 框架而不是 Silex。

我已经能够使用 Symfony 将 Neo4j 设置为 运行,并且能够将用户数据添加到图表中。现在我想在列表中显示所有用户电子邮件地址。我已经采取了这个脚本:

 public function home(Application $application, Request $request)
    {
        $neo = $application['neo'];
        $q = 'MATCH (user:User) RETURN user';
        $result = $neo->sendCypherQuery($q)->getResult();

        $users = $result->get('user');

        return $application['twig']->render('index.html.twig', array(
            'users' => $users
        ));
    }

并将其改编为:

   public function showUsersAction()
    {
        $em = $this->container->get('neo4j.manager');
        $query = 'MATCH (n:`User`) RETURN n';
        $users = $em->cypherQuery($query);

        //print_r($users);
        return $this->render('UserBundle:Account:showUsers.html.twig', array('users' =>$users));
    }

而树枝看起来如下:

{% extends '::base.html.twig' %}
{% block content %}
    <h1>get all users:</h1>
    <ul>
    {% for user in users %}
        <li>{{ user.property('email') }}</li>
    {% endfor %}
    </ul>
{% endblock %}

但是树枝中的某些东西是错误的,我得到了错误:

Method "property" for object "Everyman\Neo4j\Query\Row" does not exist in UserBundle:Account:showUsers.html.twig at line 6 

在 twig 文件的语法中发现了问题。查阅此页面后:https://github.com/jadell/neo4jphp/wiki/Cypher-and-gremlin-queries 很明显,我必须在我的树枝模板中包含 user['n']。树枝模板现在看起来是这样的:

{% extends '::base.html.twig' %}
{% block content %}
    <h1>get all users:</h1>
    <ul>
    {% for user in users %}
        <li>{{ user['n'].getProperty('email') }}</li>
    {% endfor %}
    </ul>
{% endblock %}

我是你提到的那篇文章的作者。问题是您使用的 neo4j 库与文章中使用的库不同,因此 neoclient,因此文章中使用的方法与 neo4jphp 提供的方法不同。

由于 NeoClient 大量使用了 Symfony 组件,因此将其集成到 Symfony 中非常容易,您只需覆盖 DI 即可。这里的例子:https://github.com/graphaware/GithubNeo4j/tree/master/src/GraphAware/Neo4jBundle

然后您就可以使用我在 Sitepoint 上写的 3 篇文章中介绍的方法。

所以你这个twig模板的问题是他没有找到node对象class的getProperty方法,这和neo4jphp一样正常returnsRow对象classes.

如果像文章中那样切换回 neoclient,您可以在 Twig 模板中编写:

{% for user in users %}
   <li>{{ user.getProperty('email') }}</li>
{% endfor %}