2017-03-08 69 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,所以我們不知道這種提示。非常感謝。 –

    相關問題