【问题标题】:swift Vapor - The operation couldn’t be completed. (MySQL.Error error 4.)swift Vapor - 操作无法完成。 (MySQL.Error 错误 4。)
【发布时间】:2017-07-28 23:23:48
【问题描述】:

我不断收到此错误。

我确认 mysql 服务器正在我的 MAC 机器上运行,并且我已经在 mysql 服务器中为这个项目创建了一个数据库。

  1. 下面是我的 main.swift
import Vapor
import VaporMySQL

let drop = Droplet()

try drop.addProvider(VaporMySQL.Provider.self)

drop.preparations = [Student.self]

let _ = HomeController(drop: drop)

drop.run()
  1. 下面是我的 HomeController.swift
import Vapor
import HTTP
import Foundation

final class HomeController {

    var drop: Droplet

    init(drop: Droplet) {
        self.drop = drop

    let studentsGroup = self.drop.grouped("/")
    studentsGroup.get(handler: homePageWithBankList)
    }

    func homePageWithBankList(request: Request) throws -> ResponseRepresentable {

    do {
        var student = Student()
        student.name = "name"
        try student.save()         // Here error raise
    } catch {
        print(error.localizedDescription)    // Getting error log here
    }

    return ""

    }
}
  1. 下面是我的 Student.swift 模型类
import Vapor

final class Student: Model {

    var id: Node?
    var exists: Bool = false

    var name: String = ""

    init() {
        self.id = nil
    }

    init(node: Node, in context: Context) throws {
        id = try node.extract("id")
        name = try node.extract("name")
    }

    public func makeNode(context: Context) throws -> Node {
        return try Node(node:[
            "id": id,
            "name": name
            ])
    }

    static func prepare(_ database: Database) throws {
        try database.create("student") { student in
            student.id()
            student.string("name")
        }
    }

    static func revert(_ database: Database) throws {
        try database.delete("student")
    }

}
  1. 下面是mysql.json配置文件
{
    "host": "localhost",
    "user": "root",
    "password": "admin",
    "database": "studentsDB",
    "port": "3306",
    "encoding": "utf8"
}
  1. 以下是我的包依赖项
    dependencies: [
        .Package(url: "https://github.com/vapor/vapor.git", majorVersion: 1, minor: 5),
        .Package(url: "https://github.com/vapor/mysql-provider.git", majorVersion: 1, minor: 1)
    ]
  1. 下面是在我的 MAC 上运行 mysql --version
mysql  Ver 14.14 Distrib 5.7.17, for osx10.12 (x86_64) using  EditLine wrapper

编辑:- 我在 GitHub 上有这个项目 >>Here<<

【问题讨论】:

    标签: mysql swift vapor


    【解决方案1】:

    所以这是一个初学者错误:)

    首先,改变

    do {
            var student = Student()
            student.name = "name"
            try student.save()         // Here error raise
        } catch {
            print(error.localizedDescription)    // Getting error log here
        }
    

    var student = Student()
    student.name = "name"
    do {
        try student.save()
    } catch {
        print(error)
    }
    

    看看出了什么问题

    因此,您尝试使用 students - 表,但在准备中创建了 student

    改变

    try database.create("student") { student in } ...
    

    try database.create("students") { student in } ...
    

    否则,您可以在模型声明中指定表名

    final class Student: Model {
        static var entity = "student"    
        ...
    }
    

    看看文档总是好的

    Vapor Documentation

    【讨论】:

    • 我已完成所有更改,但仍然没有运气。我还在 GitHub 上更新了该代码。
    • 你能告诉我们为什么将名字从'student'改为'students'会起作用吗?,正如我尝试使用'students'并且它有效但是在尝试了更多的表名更改后它随机使用一些表名,但随机不能与其他表名一起使用。这会让我抓狂为什么会这样。 :(。请帮助
    • 最后使用 'static var entity' 一切正常,如果你能解释为什么它会起作用,这可能是一个很好的提示,因为我认为它们中的大多数来自 iOS,所以我们不知道这种提示。非常感谢。
    猜你喜欢
    • 2017-11-19
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 2017-05-07
    • 2015-06-03
    • 2021-03-24
    • 2020-07-29
    • 2021-12-16
    相关资源
    最近更新 更多