nodejs typeorm oneToMany&manyToOne详细用法_typeorm manytoone-程序员宅基地

技术标签: 关系  typeorm  nodejs  nodejs学习笔记  OneToMany  ManyToOne  

第一次做nodejs的项目,第一次使用typeorm,可以说使用过程不是踩坑,而是沿着坑底一路走来,目前遇到最深的坑可以说是typeorm的oneToMany和manyToOne,单表查询没问题,可是关联字段一直空,差点爬不上来,官方文档和各种博客查了两天时间(可能是我自己的问题),没找到一个系统的样例,总算自己试验成功,记录下一对多查询的整个过程,留给自己,也希望帮到新手朋友们。

一端:表名 -> 人:person,字段 -> {主键:person_id, 人名:person_name}

person表
多端:表名 -> 汽车:car,字段 -> {主键:car_id, 车牌:car_brand,所属人id:person_id}
汽车表

Person.ts实体(person表)

import { Entity, Column, BaseEntity, PrimaryColumn, OneToMany } from 'typeorm';
import { Car } from './Car';

//原型@Entity({name: 'person'}), 为数据库中表的实际名称, 可以简写如下
@Entity('person')
export class Person extends BaseEntity {

    //每个数据库实体中必须包含一个PrimaryColumn
    //注意:此处不可以简写为PrimaryColumn('person_id')
    @PrimaryColumn({name: 'person_id'})
    personId: number;

    //定义属性为字段,对应person_name
    @Column({name: 'person_name'})
    personName: string;

    //定义表关系, @OneToMany不可以单独出现,对应的Car实体中必须存在对应的@ManyToOne修饰的属性person
    @OneToMany(type => Car, car => car.person)
    cars: Car[];

    //按照id查找人员和所属车辆
    static findByPersonId(personId: number) {
        return this.createQueryBuilder('Person')
            //注意不要用leftJoin方法,leftJoin方法不会将关联表Car的连接查询结果保存到Person.cars中
            .leftJoinAndSelect('Person.cars', 'Car')
            .where('Person.personId=:personId', { personId })
            .getMany();
    }
}

Car.ts实体(car表)

import { Entity, Column, BaseEntity, PrimaryColumn, ManyToOne, JoinColumn } from 'typeorm';
import { Person } from './Person';


@Entity('car')
export class Car extends BaseEntity {

    @PrimaryColumn({ name: 'car_id' })
    carId: number;

    @Column({name: 'person_id'})
    personId: number;

    @Column({ name: 'car_brand' })
    carBrand: string;

    //对应Person实体中的@OneToMany修饰的字段(不可以单独存在)
    @ManyToOne(type => Person, person => person.cars)
    //指定本表中的外键(JoinColumn只存在于多端,因为外键只会存在于多端)
    @JoinColumn({name: 'person_id'})
    person: Person;
}

配置好路由,路由配置不在本文探讨范围之内。

访问http://127.0.0.1:3000/person/1

在这里插入图片描述
可以得到 张三和张三的车 兰博基尼和宾利。

对应typeorm生成的sql语句如下。
SELECT “Person”.“person_id” AS “Person_person_id”, “Person”.“person_name” AS “Person_person_name”, “Car”.“car_id” AS “Car_car_id”, “Car”.“person_id” AS “Car_person_id”, “Car”.“car_brand” AS “Car_car_brand” FROM “person” “Person” LEFT JOIN “car” “Car” ON “Car”.“person_id”=“Person”.“person_id” WHERE “Person”.“person_id”=@0 – PARAMETERS: [“1”]

注意:.leftJoinAndSelect(‘Person.cars’, ‘Car’)如果写成leftJoin也可以生成一样的sql语句,但是并不会把连接查询的结果保存到Person的cars字段中。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/sanbowla/article/details/94380251

智能推荐

Pycharm Debug调试(纯干货)-程序员宅基地

文章浏览阅读3w次,点赞65次,收藏374次。内容目录(原文见公众号python宝或www.xmmup.com)一、打断点二、代码调试三、界面小图标介绍四、控制台介绍# 数字转换为大写人民币import sysimport io..._pycharm debug

android MediaPlayer + GLSurfaceView播放视频_mediaplayer glsurfaceview-程序员宅基地

文章浏览阅读4.7k次。1、配置layout<?xml version="1.0" encoding="utf-8"?><LinearLayout ="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" >_mediaplayer glsurfaceview

一文掌握大模型提示词技巧:从战略到战术-程序员宅基地

文章浏览阅读5.2k次,点赞76次,收藏106次。本文从战略(宏观)和战术(微观)两个层次讲解提示词技巧。希望大家能够掌握常见的提示词技巧,能够在 AI 早期积极主动学习,占领先机。_大模型提示词

Description Resource Path Location Type The superclass "javax.servlet.http.HttpServlet" was not foun_"descriptionresourcepathlocationtype the superclas-程序员宅基地

文章浏览阅读2.4k次,点赞3次,收藏3次。建了一个简单web项目,但是项目出了一个Description Resource Path Location TypeDescription Resource Path Location TypeThe superclass “javax.servlet.http.HttpServlet” was not found on the Java Build Path index.jsp /s..._"descriptionresourcepathlocationtype the superclass \"javax.servlet.http.h"

Install Sun JDK on Fedora/Redhat[收藏]_fedora install jdk-程序员宅基地

文章浏览阅读1.8k次。1. Download Sun Java JDK or JRE Download Sun Java JDK or JRE from here (current version is JDK 6 Update 20)http://java.sun.com/javase/downloads/index.jsp.Note: you can Skip login step.Download rpm.bin package (example jdk-6u20-linux-i586-rpm.bin).2. Change_fedora install jdk

android 调用拍照 程序崩溃-程序员宅基地

文章浏览阅读108次。_andori拍照返回app 崩溃

随便推点

用opencv的dnn模块做yolov5目标检测_opencv yolov5-程序员宅基地

文章浏览阅读7w次,点赞271次,收藏1.1k次。最近在微信公众号里看到多篇讲解yolov5在openvino部署做目标检测文章,但是没看到过用opencv的dnn模块做yolov5目标检测的。于是,我就想着编写一套用opencv的dnn模块做yolov5目标检测的程序。在编写这套程序时,遇到的bug和解决办法,在这篇文章里讲述一下。在yolov5之前的yolov3和yolov4的官方代码都是基于darknet框架的实现的,因此opencv的dnn模块做目标检测时,读取的是.cfg和.weight文件,那时候编写程序很顺畅,没有遇到bug。但是yolo_opencv yolov5

3的倍数(暴力搜索)_3的倍数csdn-程序员宅基地

文章浏览阅读168次。牛客小白月赛20D 3的倍数题目链接算法分析n最大为15,范围比较小,所以直接来采用爆搜就行算法实现#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<math.h>using namespace std;int ch[20][30];//ch[i][j]记录第i个字符串中j的个数,j为字符转换后的数字int dp[30];/_3的倍数csdn

【腾讯优测干货分享】如何降低App的待机内存(二)——规范测试流程及常见问题...-程序员宅基地

文章浏览阅读71次。本文来自于腾讯优测公众号(wxutest),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/806TiugiSJvFI7fH6eVA5w作者:腾讯TMQ专项测试团队导语最近小优听说,隔壁的腾讯TMQ团队出了一本新书——《移动App性能评测与优化》,便借阅了一本,读完感觉写得确实很赞。这本书体系化地介绍了移动应用性能评测与优化的方方面面,如内存,电量..._如何降低app的待机内存

Texlive2020+Texstudio2.12.22资源,附安装教程和书-程序员宅基地

文章浏览阅读1.6k次,点赞21次,收藏6次。Texlive2020+Texstudio2.12.22资源,附安装教程和刘海洋latex入门使用说明书百度云地址文件截图![\[\]](https://img-blog.csdnimg.cn/20201031105628261.png#pic_center)总结百度云地址链接:https://pan.baidu.com/s/1w4ZdEHvgMBF2uURQmnAxXw提取码:6jga复制这段内容后打开百度网盘手机App,操作更方便哦–来自百度网盘超级会员V1的分享文件截图总结如果链接..

Hamburgers 二分答案_hamburger题解-程序员宅基地

文章浏览阅读5.2k次。题目大意:有一种汉堡,用B、S、C三种原料做成,现在告诉你当前有的B、S、C的个数,到商店买的B、S、C的单价(商店无限供应这三种原料),还有你拥有的钱。问最多能做多少个汉堡。刚开始我还以为是模拟,先把能用的用完,再去买。但是写了半天写不下去了,找了一下题解才发现是二分答案板子题。发现自己对二分还是不是很敏感。AC代码://https://blog.csdn.net/hesorche..._hamburger题解

ubuntu下安装uhd+gnuradio_无法定位软件包 libuhd003-程序员宅基地

文章浏览阅读1.9k次。提示:安装uhd+gnuradio实际上并不难,只是实际安装的时候,作为新手经常会因为缺乏相关知识而踩不少坑,以下是我踩坑安装的一些记录。gnuradio+uhd安装过程ubuntu下安装uhd+gnuradioExample: For UHD 3.9.5:Example: For UHD 3.14.0.0win10下安装ubuntu双系统使用usrpb210ubuntu18.04安装方法有两种,一种是使用已经编译好的二进制码,缺点是版本通常比较旧,但学习usrp也不需要太新的版本,另外,这种_无法定位软件包 libuhd003