2017-03-08 68 views
0

我不断收到此错误。swift Vapor - 操作无法完成。 (MySQL.Error错误4.)

我确认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() 
  • 下面是我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 "" 
    
        } 
    } 
    
  • 下面是我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") 
        } 
    
    } 
    
  • 下面是mysql.json配置文件
  • { 
        "host": "localhost", 
        "user": "root", 
        "password": "admin", 
        "database": "studentsDB", 
        "port": "3306", 
        "encoding": "utf8" 
    } 
    
  • 下面是我的包依赖性
  • 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) 
        ] 
    
  • 下面是在我的MAC
  • 运行MySQL --version
    mysql Ver 14.14 Distrib 5.7.17, for osx10.12 (x86_64) using EditLine wrapper 
    

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

    回答

    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) 
    } 
    

    ,看看有什么地方出了错

    所以,你尝试使用学生 - 表,但创建学生在您的准备。

    变化

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

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

    否则,您可以用

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

    总是好的指定模型的声明中的表名来看看文档

    Vapor Documentation

    +0

    我已经做了所有的改变,但仍然没有运气。我也更新了GitHub上的代码。 –

    +0

    你能告诉我们为什么从'学生'改为'学生'的名字会起作用吗?,因为我尝试了'学生',它的工作原理,但尝试了更多的表名更改后,它随机与一些表名称工作,但随机不工作与其他表名。这会让我发疯,为什么会发生这种情况。 :(。plz help –

    +0

    最后使用'静态var实体'一切正常,如果你能解释为什么这样工作,这可能是一个好的提示,因为在蒸气中我认为它们大多数来自iOS,所以我们不知道这种提示。非常感谢。 –

    相关问题