IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 【Vapor】07 Chapter 9: Parent-Child Relationships -> 正文阅读

[移动开发]【Vapor】07 Chapter 9: Parent-Child Relationships

0x00 Chapter 9: Parent-Child Relationships

1.Parent-child relationships describe a relationship where one model has “ownership” of one or more models.
They are also known as one-to-one and one-to-many relationships.


2.In the TIL application, users will create acronyms.
Users (the parent) can have many acronyms, and an acronym (the child) can only be created by one user.


3.Creating a user
create User.swift in Sources/App/Models
create CreateUser.swift in Sources/App/Migrations
create UsersController.swift in Sources/App/Controllers

用户数据模型:User.swift

import Vapor
import Fluent

final class User: Model, Content {
    // 数据库中的表名
    static let schema = "users"
    
    // id 字段
    @ID
    var id: UUID?
    
    // name 字段    
    @Field(key: "name")
    var name: String
    
    // username 字段
    @Field(key: "username")
    var username: String
    
    init() {}
    
    init(id: UUID? = nil, name: String, username: String) {
        self.name = name
        self.username = name
    }
}

用户数据表创建: CreateUser.swift

import Fluent

struct CreateUser: Migration {
    func prepare(on database: Database) -> EventLoopFuture<Void>{
        database.schema("users")
            .id()
            .field("name", .string, .required)
            .field("username", .string, .required)
            .create()
    }
    
    func revert(on database: Database) -> EventLoopFuture<Void>{
        database.schema("users").delete()
    }
}

Finally, open configure.swift to add CreateUser to the migration list.
Insert the following after app.migrations.add(CreateAcronym()):

app.migrations.add(CreateUser())

4.User controller
UsersController.swift

import Fluent
import Vapor

struct UsersController: RouteCollection {
    func boot(routes: RoutesBuilder) throws {
    	// 路由组
        let usersRoute = routes.grouped("api", "users")
        // 路由
        usersRoute.post(use: createHandler)
        usersRoute.get(use: getAllHandler)
        usersRoute.get(":userID", use: getHandler)
    }
    
    // 创建用户
    func createHandler(_ req: Request) throws -> EventLoopFuture<User> {
        let user = try req.content.decode(User.self)
        return user.save(on: req.db).map { user }
    }
    
    // 查询所有用户
    func getAllHandler(_ req: Request) throws -> EventLoopFuture<[User]> {
        User.query(on: req.db).all()
    }
    
    // 根据 ID 查询用户
    // http://127.0.0.1:8080/api/users/<ID>
    func getHandler(_ req: Request) throws -> EventLoopFuture<User> {
        User.find(req.parameters.get("userID"), on: req.db)
            .unwrap(or: Abort(.notFound))
    }
}

open routes.swift and add the following to the end of routes(_:)

try app.register(collection: UsersController())

5.测试接口
以上文件的创建,与 Acronym 类似
标准三件套:

XXX.swift
CreateXXX.swift
XXXsController.swift

XXX 是具体的数据模型
CreateXXX 用于创建数据表
XXXsController 用于处理路由事件

a.创建用户
需要提交数据
url: http://127.0.0.1:8080/api/users
method: POST
parameters: {"name": "老五", "username":"王五"}

请添加图片描述


b.查询所有用户

url: http://127.0.0.1:8080/api/users
method: GET
parameters:

直接在浏览器访问也行的
返回数据
[{"name":"老三","id":"723A2733-DFD7-4193-9A81-4E85A708326B","username":"张三"},{"name":"老四","id":"E31B5335-EFD9-4D37-9AE2-4CD327D418BE","username":"李四"},{"name":"老五","id":"A9D70526-A793-432A-9E4A-7548F9EE3D19","username":"王五"}]


c.根据 ID 查询用户

url: http://127.0.0.1:8080/api/users/A9D70526-A793-432A-9E4A-7548F9EE3D19
method: GET
parameters:

直接在浏览器访问
返回数据
{"id":"A9D70526-A793-432A-9E4A-7548F9EE3D19","username":"王五","name":"老五"}


0x01 创建关联关系

下篇正在准备中…
敬请期待~


0x02 我的作品

欢迎体验我的作品之一:小五笔 86 版
五笔学习好帮手!
App Store 搜索即可~


  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-04-18 17:54:07  更:2022-04-18 17:58:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 21:30:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码