You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用PHP操作Neo4j数据库实现数据建模及增删改查

1 等效关系型表的结构实现

Neo4j为无模式图数据库,没有关系型数据库中“表”的严格定义,与MySQL中users_table对应的是带User标签的节点集合,你可以通过创建约束和索引实现与MySQL建表语句等效的主键、字段校验、唯一值限制能力:

// 初始化用户id自增计数器(仅需执行1次,等效auto_increment)
$client->run('MERGE (c:Counter {name: "user_id"}) ON CREATE SET c.value = 0');

// 创建id字段唯一约束,等效MySQL的primary key
$client->run('CREATE CONSTRAINT user_id_unique IF NOT EXISTS FOR (u:User) REQUIRE u.id IS UNIQUE');

// 创建email字段唯一约束,避免重复注册
$client->run('CREATE CONSTRAINT user_email_unique IF NOT EXISTS FOR (u:User) REQUIRE u.email IS UNIQUE');

// 可选:创建字段非空、类型校验约束(Neo4j 4.4及以上版本支持)
$client->run('CREATE CONSTRAINT user_fullname_notnull IF NOT EXISTS FOR (u:User) REQUIRE u.fullname IS NOT NULL');
$client->run('CREATE CONSTRAINT user_email_type IF NOT EXISTS FOR (u:User) REQUIRE u.email IS :: STRING');
2 增删改查操作等效实现

neo4j-php-client支持原生参数绑定,用法与PDO高度相似,以下是对应操作的实现示例:

2.1 插入操作

$cypher = <<<'CYPHER'
MATCH (c:Counter {name: "user_id"})
SET c.value = c.value + 1
CREATE (u:User {
    id: c.value,
    password: $password,
    fullname: $fullname,
    email: $email
})
CYPHER;

$client->run($cypher, [
    'password' => 'my pass',
    'fullname' => 'Nkem C',
    'email' => 'testing@gmail.com'
]);

2.2 更新操作

$cypher = <<<'CYPHER'
MATCH (u:User {email: $email})
SET u.password = $password, u.fullname = $fullname
CYPHER;

$client->run($cypher, [
    'password' => 'my pass1',
    'fullname' => 'Nkem C1',
    'email' => 'testing@gmail.com'
]);

2.3 删除操作

// 按email删除指定用户
$cypher = <<<'CYPHER'
MATCH (u:User {email: $email})
DELETE u
CYPHER;
$client->run($cypher, ['email' => 'testing@gmail.com']);

// 删除所有User节点(等效DELETE FROM users_table)
// 若节点关联了其他关系,需将DELETE改为DETACH DELETE同时删除关联关系
$client->run('MATCH (u:User) DELETE u');

2.4 查询操作

// 按邮箱和密码查询指定用户
$cypher = <<<'CYPHER'
MATCH (u:User {email: $email, password: $password})
RETURN u.id AS id, u.fullname AS fullname, u.email AS email
CYPHER;
$result = $client->run($cypher, [
    'email' => 'testing@gmail.com',
    'password' => 'my pass'
]);
if ($result->count() > 0) {
    $user = $result->first();
    $id = $user->get('id');
    $fullname = $user->get('fullname');
}

// 查询所有用户(等效SELECT * FROM users_table)
$result = $client->run('MATCH (u:User) RETURN u.id AS id, u.fullname AS fullname, u.email AS email');
foreach ($result as $record) {
    $id = $record->get('id');
    $fullname = $record->get('fullname');
    // 处理单条用户数据
}

内容的提问来源于stack exchange,提问作者Nancy Moore

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 19:15:07