尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
NeoEloquent Edge 属性操作技巧:给关系添加时间戳与自定义字段
NeoEloquent Edge 属性操作技巧给关系添加时间戳与自定义字段【免费下载链接】NeoEloquentThe Neo4j OGM for Laravel项目地址: https://gitcode.com/gh_mirrors/ne/NeoEloquentNeoEloquent 是 Laravel 生态中最流行的 Neo4j 图数据库 ORM官方定位为 The Neo4j OGM for Laravel。在 Neo4j 中关系Relationship本身就是一种实体可以携带属于自己的属性而 NeoEloquent 通过Edge机制把这一能力优雅地封装给了开发者。本文带你掌握 NeoEloquent Edge 属性操作的核心技巧如何给关系自动添加时间戳、如何写入自定义字段以及如何读取这些关系属性。无论你是刚接触图数据库的新手还是想深入玩转关系属性的进阶用户这篇 NeoEloquent Edge 教程都能帮你快速上手。为什么要关注 Edge关系属性有什么用在传统 SQL 里关系只是外键无法携带关系自己的数据。但在图数据库中关系可以描述什么时候、以什么身份、多少次发生连接。举个例子用户与角色之间是belongsToMany关系我们想知道用户从哪一年开始担任这个角色位置与用户之间是belongsTo关系我们想知道用户最近一次出现在这个位置的时间这些关系身上的数据在 NeoEloquent 里就是Edge 属性Edge Attributes。NeoEloquent 将 Edge 设计成一种轻量模型你可以像操作 Eloquent 模型一样去读写它。相关源码位于 src/Eloquent/Edges/Edge.php方向类分别为 EdgeIn.php入向关系和 EdgeOut.php出向关系。开启 Edge 自动时间戳的 3 个前提条件 ✅NeoEloquent Edge 默认就会尝试维护created_at和updated_at两个时间戳但有一个关键前提父模型必须开启时间戳功能。在 Edge.php 中定义了常量CREATED_AT与UPDATED_AT并在初始化关系initRelation()和保存save()时调用updateTimestamps()自动写入。只需在父模型中声明时间戳即可class User extends NeoEloquent { public $timestamps true; // 开启时间戳 }前提条件说明父模型$timestamps true这是 Edge 自动维护时间戳的总开关关系创建时自动写入created_at与updated_at关系更新时仅更新updated_at不覆盖created_at快速验证时间戳是否生效 ✅你可以用一段非常简单的代码验证关联模型后直接读取时间戳它会是Carbon\Carbon实例见 tests/functional/BelongsToRelationTest.php 中的测试写法$relation $location-user()-associate($user); // created_at 和 updated_at 都是 Carbon 实例 $created $relation-created_at; // 2026-08-18 08:40:11 $updated $relation-updated_at; // 2026-08-18 08:40:11给关系添加自定义字段的 3 种高效方法 Edge 最强大的地方在于你可以为一段关系存储任意自定义属性。以下是三种最常用的 NeoEloquent Edge 属性写入方式。方法一保存关系时直接传入属性数组在hasOne、hasMany等关系的save()方法中第二个参数就是关系属性实现见 src/Eloquent/Relations/HasOneOrMany.php$post new Post([title 你好图数据库]); // 保存文章同时给关系写入自定义字段 $edge $user-posts()-save($post, [is_pinned true, read_time 5]);方法二属性赋值后手动保存Edge 支持魔术属性赋值非常接近 Eloquent 的体验README 官方示例同样如此$relation $location-user()-associate($user); $relation-since 1966; // 自定义字段从哪年开始 $relation-present true; // 自定义字段是否在任 $relation-save();方法三使用 fill() 批量填充当自定义字段较多时用fill()一次性写入更高效Edge 的fill()方法定义在 Edge.php$relation $location-user()-associate($user); $relation-fill([ since 1966, present true, level senior, ]); $relation-save();如何读取已存在关系的 Edge 属性 关系保存后你可以通过edge()方法把关系重新取出来再像读模型属性一样读取它$location Location::find(1892); // 不带参数根据关系方法名自动推断另一端的模型 $edge $location-user()-edge(); // 带参数明确指定另一端的模型 $edge $location-user()-edge($location-user); // 读取自定义字段 echo $edge-since; // 1966 // 获取全部属性 $all $edge-toArray(); // 或 $edge-getAttributes()读取时间戳时NeoEloquent 会把存储的日期自动转换回Carbon实例asDateTime()负责转换所以你可以直接调用 Carbon 的全部日期方法$edge-created_at-format(Y-m-d H:i:s); $edge-updated_at-diffForHumans(); // 3 分钟前进阶技巧自定义日期字段也走 Carbon 转换 Edge 不仅内置了created_at/updated_at两个日期字段还允许你在 Edge 上声明额外的日期字段。Edge 的getDates()方法Edge.php会把自定义的$dates数组与默认时间戳合并凡是声明过的字段写入时自动格式化为存储格式、读取时自动转回 Carbonclass MembershipEdge extends EdgeOut { protected $dates [expires_at]; }之后你就能像使用内置时间戳一样使用expires_at了无需手动做任何日期格式转换。常见踩坑提醒 ⚠️场景需要留意的地方时间戳不生效检查父模型是否设置了$timestamps true关系被覆盖一对一唯一关系重新关联时旧关系会被自动删除见 Edge.php 中save()的唯一性处理读取值为空请先确认edge()传入了正确的模型或关系确实已保存自定义日期不转换记得把字段加入 Edge 的$dates数组总结让每一条关系都会说话 NeoEloquent 的 Edge 机制是它区别于普通 ORM 的最大亮点之一关系不只是连接更是可携带业务数据的实体。通过本文介绍的技巧你可以用$timestamps true让关系自动获得created_at/updated_at用save($model, $attributes)、属性赋值或fill()三种方式写入自定义字段用edge()方法取回关系并读取属性时间戳自动转 Carbon通过$dates数组让任意字段享受日期自动转换想让你的 Neo4j 数据模型更丰满不妨从今天起给每条 Edge 加上属于它自己的时间戳与字段吧【免费下载链接】NeoEloquentThe Neo4j OGM for Laravel项目地址: https://gitcode.com/gh_mirrors/ne/NeoEloquent创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

一个U盘装下几十个系统镜像:免费开源Ventoy 5分钟快速上手

一个U盘装下几十个系统镜像:免费开源Ventoy 5分钟快速上手

一个U盘装下几十个系统镜像:免费开源Ventoy 5分钟快速上手 【免费下载链接】Ventoy A new bootable USB solution. 项目地址: https://gitcode.com/GitHub_Trending/ve/Ventoy 折腾过系统安装的朋友大多有这种经历:想试试某个 Linux 发行版&#…

📅 2026/9/8 3:20:13
jQuery自动补全插件终极指南:3步搞定输入框智能提示

jQuery自动补全插件终极指南:3步搞定输入框智能提示

jQuery自动补全插件终极指南:3步搞定输入框智能提示 【免费下载链接】jQuery-Autocomplete Ajax Autocomplete for jQuery allows you to easily create autocomplete/autosuggest boxes for text input fields 项目地址: https://gitcode.com/gh_mirrors/jq/jQue…

📅 2026/9/10 2:29:16
手把手复现Qwen3-VL-8B-Instruct-da8w8-torchao-v0.17.0:用TorchAO脚本从零量化8B多模态模型全流程

手把手复现Qwen3-VL-8B-Instruct-da8w8-torchao-v0.17.0:用TorchAO脚本从零量化8B多模态模型全流程

手把手复现Qwen3-VL-8B-Instruct-da8w8-torchao-v0.17.0:用TorchAO脚本从零量化8B多模态模型全流程 【免费下载链接】Qwen3-VL-8B-Instruct-da8w8-torchao-v0.17.0 项目地址: https://ai.gitcode.com/hf_mirrors/amd/Qwen3-VL-8B-Instruct-da8w8-torchao-v0.17.0…

📅 2026/10/5 3:08:26
MORE NEWS

更多资讯

📰

HuggingFace英译中模型迁移ONNX:CPU推理加速与INT8量化实战

1. 为什么要把英译中模型从 HuggingFace 搬到 ONNX1.1 一个真实的需求场景去年帮一个做跨境电商的朋友处理商品详情页的本地化问题,他手里攒了大概几十万条英文商品描述,想批量翻成中文。一开始想直接调云端翻译接口,算下来成本不低&#xff…

📰

Caffeine+Redis两级缓存:高并发下的热key与穿透治理实战

上个月我们线上有个服务被一波大促流量打懵了,Redis 的 QPS 飙到十几万,带宽先撑不住了,紧接着就是各种redis command timed out; nested exception is io.lettuce.core.RedisCommandTimeoutException。这个报错让我第一次认真反思&#xff1…

📰

Mesh组网实战:告别单路由死角,全屋Wi-Fi无缝漫游

你家真的需要Mesh吗?先说结论:如果你家和我一样是套内120平以上、路由器放在客厅、卧室或者书房总有一两个角落信号拉胯,而且你又不想在家里拉明线或者每个房间都手动切换Wi-Fi名称,那Mesh组网基本就是现阶段最省心的全屋Wi-Fi解决…

📰

C++单元测试实战指南:从框架选型到CI覆盖率落地

做C开发几年之后,你会发现一个特别反直觉的现象:明明越到后期越需要胆大心细,但改起代码来却越来越畏手畏脚。改一个接口,牵一发动全身,编译能过,运行也正常,可你就是不敢确定有没有把某个角落里…

📰

HubSpot 2026营销现状报告:AI与全旅程增长重塑营销策略

1. 报告里的核心信号:增长逻辑已经换了每年 HubSpot 的《营销现状报告》发出来,营销圈都会有一波讨论,今年这份《HubSpot 2026 营销现状报告》尤其值得认真看。它不是简单罗列“哪个渠道流量涨了”“哪个工具更火”,而是一次对营销…

📰

控制即推断:变分推断与KL散度在最优控制中的实践

1. 从最优控制到概率推断的思维转换第一次接触Control as Inference这个概念,是在啃一本强化学习教材的间隙。当时我正在做一个机械臂轨迹跟踪的项目,用传统的MPC(模型预测控制)框架调参调得头大——约束要一条条写,代…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬