【golang-ent】go-zero框架 整合 ent orm框架 | 解决left join未关联报错的问题

一、场景

在这里插入图片描述

1、子表:cp_member_point_history

cp_member_point_history表中字段:cp_point_reward_id 是cp_point_reward的主键id
当本表中的cp_point_reward_id字段为0(即:没有可关联主表的)

在这里插入图片描述

CREATE TABLE `cp_member_point_history` (`id` bigint NOT NULL AUTO_INCREMENT,`point` int DEFAULT NULL COMMENT '获取积分',`cp_point_reward_id` bigint DEFAULT NULL COMMENT '外键 cp_point_reward 主键id',`show_status` tinyint(1) DEFAULT NULL COMMENT '是否删除:0、可用,1:删除',`updated_at` datetime DEFAULT NULL COMMENT '更新时间',`created_at` datetime DEFAULT NULL COMMENT '创建时间',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='用户积分变更历史';

2、主表:cp_point_reward

在这里插入图片描述

CREATE TABLE `cp_point_reward` (`id` bigint NOT NULL AUTO_INCREMENT,`point` int DEFAULT NULL COMMENT '消耗积分',`name` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '奖品名称',`reward` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '奖品说明',`reward_status` int DEFAULT NULL COMMENT '1:上架、2:下架(默认是1)',`show_status` tinyint(1) DEFAULT NULL COMMENT '是否删除:0、可用,1:删除',`updated_at` datetime DEFAULT NULL COMMENT '更新时间',`created_at` datetime DEFAULT NULL COMMENT '创建时间',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='积分奖品';

3、golang 使用 ent 源码

在这里插入图片描述

当 左连接 WithCpPointRewardMPH()时,无法进行关联时,则下面循环时,直接报错panic

package cpMemberPointHistoryimport ("context""fmt""github.com/suyuan32/simple-admin-common/utils/pointy""github.com/zeromicro/go-zero/core/logx"
)type GetCpMemberPointHistoryListLogic struct {ctx    context.ContextsvcCtx *svc.ServiceContextlogx.Logger
}func NewGetCpMemberPointHistoryListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetCpMemberPointHistoryListLogic {return &GetCpMemberPointHistoryListLogic{ctx:    ctx,svcCtx: svcCtx,Logger: logx.WithContext(ctx),}
}func (l *GetCpMemberPointHistoryListLogic) GetCpMemberPointHistoryList(in *cpgobusiness.CpMemberPointHistoryListReq) (*cpgobusiness.CpMemberPointHistoryListResp, error) {var predicates []predicate.CpMemberPointHistoryif in.CpMemberId != nil {predicates = append(predicates, cpmemberpointhistory.CpMemberID(*in.CpMemberId))}if in.CpPointRewardId != nil {predicates = append(predicates, cpmemberpointhistory.CpPointRewardID(*in.CpPointRewardId))}if in.CpResourceId != nil {predicates = append(predicates, cpmemberpointhistory.CpResourceID(*in.CpResourceId))}result, err := l.svcCtx.DB.CpMemberPointHistory.Query().Where(predicates...).WithCpMemberMPH().WithCpPointRewardMPH().WithCpResourceMPH().Page(l.ctx, in.Page, in.PageSize, func(pager *ent.CpMemberPointHistoryPager) {pager.Order = ent.Desc(cpmemberpointhistory.FieldID)})if err != nil {return nil, dberrorhandler.DefaultEntError(l.Logger, err, in)}resp := &cpgobusiness.CpMemberPointHistoryListResp{}resp.Total = result.PageDetails.Totalfor _, v := range result.List {Template := &cpgobusiness.CpMemberPointHistoryInfo{Id:              &v.ID,CreatedAt:       pointy.GetPointer(v.CreatedAt.UnixMilli()),UpdatedAt:       pointy.GetPointer(v.UpdatedAt.UnixMilli()),ShowStatus:      pointy.GetPointer(int64(v.ShowStatus)),CpMemberId:      &v.CpMemberID,Point:           &v.Point,ChangeType:      &v.ChangeType,CpResourceId:    &v.CpResourceID,CpPointRewardId: &v.CpPointRewardID,GainType:        &v.GainType,Name:            &v.Edges.CpMemberMPH.Name,Phone:           &v.Edges.CpMemberMPH.Phone,NickName:        &v.Edges.CpMemberMPH.NickName,Gender:          &v.Edges.CpMemberMPH.Gender,PointName:       pointy.GetPointer(""),ResourceTitle:   &v.Edges.CpResourceMPH.Title,}if v.Edges.CpPointRewardMPH != nil {fmt.Println("------------ v.Edges.CpPointRewardMPH.Name:", v.Edges.CpPointRewardMPH.Name)Template.PointName = &v.Edges.CpPointRewardMPH.Name}resp.Data = append(resp.Data, Template)}return resp, nil
}

4、解决方案

问题:
报错的位置在:&v.Edges.CpPointRewardMPH.Name
因为 v.Edges.CpPointRewardMPHnil

解决

先判断 v.Edges.CpPointRewardMPH 是否为空
如果不为空,则赋值

if v.Edges.CpPointRewardMPH != nil {fmt.Println("------------ v.Edges.CpPointRewardMPH.Name:", v.Edges.CpPointRewardMPH.Name)Template.PointName = &v.Edges.CpPointRewardMPH.Name
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/47703.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构(Java):优先级队列(堆)堆的模拟实现

目录 1、优先级队列 1.1 概念 1.2 PriorityQueue底层结构 2、 堆 2.1 堆的概念 2.2 堆的存储结构 3、优先级队列(堆)的模拟实现 3.1 堆的创建 3.1.1 向下调整算法建完整堆 3.2 堆的插入 3.2.1 向上调整算法 3.3 堆的删除 3.4 堆排序 1、优先…

CH552的bootload程序IAP直接对ROM-flash修改数据(未尝试)

手动写bootload程序的可能 1,根据ch552g的使用手册内容查看到 2,在下面的参考文件的IAP文件夹中看到IAP文件 参考 下面程序中并没有跳转到厂家bootload的过程,这是直接通过控制有关的寄存器对FLSH进行直接写入和修改,这样可以认…

如何学习Hadoop:糙快猛的大数据之路(利用GPT 学习)

目录 引言Hadoop是什么?学习Hadoop的"糙快猛"之道1. 不要追求完美,先动手再说2. 从简单的MapReduce开始3. 利用大模型加速学习4. 循序渐进,建立知识体系 构建您的Hadoop技能树1. 夯实基础:Linux和Java2. 深入理解HDFS3.…

AI 应用还没有大量出现,缺什么?缺聊天机器人编程语言 | Chatopera

只有帮助人发挥创意的才是大市场 现在是需要大量的 AI 应用了。如何产生大量的 AI 应用呢?当年乔布斯说,他看到了个人电脑的两个趋势,一个是图形化用户界面,一个是面向对象编程语言。今天,AI 应用也是新的【图形用户界…

【QT】label中添加QImage图片并旋转(水平翻转、垂直翻转、顺时针旋转、逆时针旋转)

目录 0.简介 1.详细代码及解释 1)原label显示在界面上 2)水平翻转 3)垂直翻转 4)顺时针旋转45度 5)逆时针旋转 0.简介 环境:windows11 QtCreator 背景:demo,父类为QWidget&a…

Cisco 路由重发布 —— 实现路由信息在不同路由选择域间的传递

一、技术背景 在实际的组网中,可能会遇到这样一个场景:在一个网络中同时存在两种或者两种以上的路由协议。例如客户的网络原先是纯 Cisco 的设备,使用 EIGRP 协议将网络的路由打通。但是后来网络扩容,增加了一批华为的设备&#…

应用层——HTTP

像我们电脑和手机使用的应用软件就是在应用层写的,当我们的数据需要传输的时候换将数据传递到传输层。 应用层专门给用户提供应用功能,比如HTTP,FTP… 我们程序员写的一个个解决我们实际的问题都在应用层,我们今天来聊一聊HTTP。 协议 协议…

【接口自动化_12课_基于Flask搭建MockServer】

知识非核心点,面试题较少。框架搭建的过程中的细节才是面试要点 第三方接口,不方便进行测试, 自己要一个接口去进行模拟。去作为我们项目访问模拟接口。自己写一个接口,需要怎样写 一、flask:轻量级的web应用的框架 安装命令 …

旧系统的会员信息如何导入新系统?

千呼新零售2.0系统是零售行业连锁店一体化收银系统,包括线下收银线上商城连锁店管理ERP管理商品管理供应商管理会员营销等功能为一体,线上线下数据全部打通。 适用于商超、便利店、水果、生鲜、母婴、服装、零食、百货、宠物等连锁店使用。 详细介绍请…

数据库相关概念

MySQL 启动停止 MySQL安装完成之后,在系统启动时,会自动启动MySQL服务,无需手动启动。 手动的通过指令启动停止,以管理员身份运行cmd,进入命令行执行如下指令: net start mysql80 net stop mysql80 注意 …

JMeter使用小功能-(持续更新)

1、jmeter在同一个线程组内,uuid的复用 方式一: 方式二: 2、获得jMeter使用的线程总数 ctx.getThreadGroup().getNumberOfThreads()来表示活动线程总数 int threadNumctx.getThreadGroup().getNumThreads(); String threads Integer…

机械学习—零基础学习日志(高数05——函数概念与特性)

零基础为了学人工智能,真的开始复习高数 本小节讲解隐函数,有点神奇,我竟然完全没有隐函数记忆了。 隐函数 隐函数,我个人通俗理解就是,在复杂的环境里,发现纯净天地。例如,在外太空的某个大陆…

工信部信通院首份全景图 | 天空卫士产品26个版块多覆盖

近日,2024全球数字经济大会——数字安全生态建设专题论坛在北京成功举办,论坛由全球数字经济大会组委会主办,中国信息通信研究院和公安部第三研究所共同承办。论坛上,中国信息通信研究院隆重推出了业界首期《数字安全护航技术能力…

Flink集群搭建

(1)JAVA_HOME 配置 conf/flink-conf.yaml env.java.home (2)与Hadoop关联,如果确认使用Hadoop相关功能,需要关注对应的版本。如果不使用,则随意 使用flink版本 下载最新版本后,将存…

(四)原生js案例之手风琴效果

手风琴效果也是业务开发中一个比较常见的效果,类似QQ那样的折叠功能 效果预览 代码实现 必要的css * {margin: 0;padding: 0;}body {height: 100vh;background: linear-gradient(200deg, #ffff00 0%, #ee82ee 100%);overflow: hidden;}ul {list-style: none;}#List {margin:…

Stable Diffusion:质量高画风清新细节丰富的二次元大模型二次元插图

今天和大家分享一个基于Pony模型训练的二次元模型:二次元插图。关于该模型有4个不同的分支版本。 1.5版本:loar模型,推荐底模型niji-动漫二次元4.5。 xl版本:SDXL模型版本 mix版本:光影减弱,减少SDXL版本…

C/C++ yaml 库

文章目录 一、yaml 介绍1.1 yaml 介绍1.2 yaml 教程1.3 yaml 在线工具1.4 yaml 出现背景 二、C/C yaml 库选型2.2 libfyaml2.3 yaml-cpp 一、yaml 介绍 1.1 yaml 介绍 YAML(YAML Ain’t Markup Language)是一种人类可读的数据序列化格式,通…

模型训练中出现loss为NaN怎么办?

文章目录 一、模型训练中出现loss为NaN原因1. 学习率过高2. 梯度消失或爆炸3. 数据不平衡或异常4. 模型不稳定5. 过拟合 二、 针对梯度消失或爆炸的解决方案1. 使用torch.autograd.detect_anomaly()2. 使用 torchviz 可视化计算图3. 检查梯度的数值范围4. 调整梯度剪裁 三、更具…

uni-app开发日志:unicloud使用时遇到的问题解决汇总(不断补充)

插件安装后提示与原数据库表冲突(2024.7.18) 安装uni-admin后再安装uni-cms,在uni-admin中添加好菜单,结果提示该错误 回到hbuilder中uniCloud/database中找到冲突的部分 比较一下,选中老的删除 opendb-news-articl…

HarmonyOS根据官网写案列~ArkTs从简单地页面开始

Entry Component struct Index {State message: string 快速入门;build() {Column() {Text(this.message).fontSize(24).fontWeight(700).width(100%).textAlign(TextAlign.Start).padding({ left: 16 }).fontFamily(HarmonyHeiTi-Bold).lineHeight(33)Scroll() {Column() {Ba…