您的位置 首页 知识分享

使用 Goravel 进行 CRUD 操作 (Laravel for GO)

关于goravel goravel是一个功能齐全、扩展性极佳的web应用框架,作为入门脚手架,帮助gopher…

使用 Goravel 进行 CRUD 操作 (Laravel for GO)

关于goravel

goravel是一个功能齐全、扩展性极佳的web应用框架,作为入门脚手架,帮助gopher快速构建自己的应用。

goravel 是针对 go 开发人员的 的完美克隆,这意味着像我这样的 php 开发人员可以轻松地与该框架建立联系并开始编写,几乎不需要学习。

下面开始安装,您可以按照本文安装或访问goravel官方文档网站。

// download framework git clone https://github.com/goravel/goravel.git && rm -rf goravel/.git*  // install dependencies cd goravel && go mod tidy  // create .env environment configuration file cp .env.example .env  // generate application key go run . artisan key:generate  //start the application go run . 
登录后复制

在你最喜欢的文本编辑器中打开代码,你会看到项目结构与 laravel 完全一样,所以 laravel 开发者不会感到如此迷失。

模型、迁移和控制器

要创建模型、迁移和控制器,我们可以使用 artisan 命令,就像在 laravel 中一样。

// create model  go run . artisan make:model category  // create migration  go run . artisan make:migration create_categories_table  // create controller  go run . artisan make:controller --resource category_controller 
登录后复制

现在,如果我们检查数据库/迁移文件夹,我们将看到已经为我们创建了文件,向上和向下文件,打开向上迁移文件并将以下代码粘贴到其中:

create table categories (   id bigint(20) unsigned not null auto_increment,   name varchar(255) not null,   created_at datetime(3) not null,   updated_at datetime(3) not null,   primary key (id),   key idx_categories_created_at (created_at),   key idx_categories_updated_at (updated_at) ) engine = innodb default charset = utf8mb4;ngine = innodb default charset = utf8mb4; 
登录后复制

如果我们检查app/http/controllers文件夹中,我们将有一个category_controller.go文件,里面的内容应该如下所示:

package controllers  import (  "github.com/goravel/framework/contracts/http" )  type categorycontroller struct {  //dependent services }  func newcategorycontroller() *categorycontroller {  return &categorycontroller{   //inject services  } }  func (r *categorycontroller) index(ctx http.context) http.response {  return nil }   func (r *categorycontroller) show(ctx http.context) http.response {  return nil }  func (r *categorycontroller) store(ctx http.context) http.response {  return nil }  func (r *categorycontroller) update(ctx http.context) http.response {  return nil }  func (r *categorycontroller) destroy(ctx http.context) http.response {  return nil } 
登录后复制

然后,让我们在 app/http/model 中找到类别模型文件,然后将以下代码粘贴到其中:

package models  import (  "github.com/goravel/framework/database/orm" )  type category struct {  orm.model  name string } 
登录后复制

这里没有发生什么,我们只是用他们的数据类型声明我们的可填充。

让我们在路由文件夹中找到 api.php 文件并将代码更新为如下所示:

package routes  import (  "github.com/goravel/framework/facades"   "goravel/app/http/controllers" )  func api() {  usercontroller := controllers.newusercontroller()  facades.route().get("/users/{id}", usercontroller.show)   //resource route  categorycontroller := controllers.newcategorycontroller()  facades.route().resource("/category", categorycontroller) } 
登录后复制

现在,让我们更新category_controller.go 文件中的导入并将其更新为以下内容:

import (  "goravel/app/models"  "github.com/goravel/framework/contracts/http"   "github.com/goravel/framework/facades" ) 
登录后复制

我们刚刚导入了模型和门面,门面让我们能够访问很多很酷有用的东西,比如验证、orm 等。orm 是 go 的 orm。

是时候编写一些代码了!

让我们将控制器中的方法更新为以下代码:

索引方法

// this is just to pull all categories in our database func (r *categorycontroller) index(ctx http.context) http.response {  var categories []models.category   if err := facades.orm().query().find(&categories); err != nil {   return ctx.response().json(http.statusinternalservererror, http.json{    "error": err.error(),   })  }   return ctx.response().success().json(http.json{   "success": true,   "message": "data fetch successfully",   "data":    categories,  }) }  
登录后复制

储存方法

func (r *categorycontroller) store(ctx http.context) http.response {  // validate the input name that the user is passing  validation, err := facades.validation().make(ctx.request().all(), map[string]string{         "name": "required|string",     })  // check if an error occured, might not be validation error     if err != nil {         return ctx.response().json(http.statusinternalservererror, http.json{             "success": false,             "message": "validation setup failed",             "error":   err.error(),         })     }  // check for validation errors     if validation.fails() {         return ctx.response().json(http.statusbadrequest, http.json{             "success": false,             "message": "validation failed",             "errors":  validation.errors().all(),         })     }  // create the category  category := &models.category{   name: ctx.request().input("name"),  }  // save the category and return error if there is any  if err := facades.orm().query().create(category); err != nil {   return ctx.response().json(http.statusinternalservererror, http.json{    "success": false,    "errors": err.error(),   })  }  // upon successfull creation return success response with the newly created category  return ctx.response().success().json(http.json{   "success": true,   "message": "category created successfully",   "data":    category,  }) } 
登录后复制

更新方法

func (r *categorycontroller) update(ctx http.context) http.response {      validation, err := facades.validation().make(ctx.request().all(), map[string]string{         "id":   "required",         "name": "required|string",     })      if err != nil {         return ctx.response().json(http.statusinternalservererror, http.json{             "success": false,             "message": "validation setup failed",             "error":   err.error(),         })     }      if validation.fails() {         return ctx.response().json(http.statusbadrequest, http.json{             "success": false,             "message": "validation failed",             "errors":  validation.errors().all(),         })     }  // find the category using the id     var category models.category     if err := facades.orm().query().where("id", ctx.request().input("id")).first(&category); err != nil {         return ctx.response().json(http.statusnotfound, http.json{             "success": false,             "message": "category not found",         })     }  // update or return error if there is any     category.name = ctx.request().input("name")     if err := facades.orm().query().save(&category); err != nil {         return ctx.response().json(http.statusinternalservererror, http.json{             "success": false,             "message": "failed to update category",             "error":   err.error(),         })     }  // return success if successfull     return ctx.response().success().json(http.json{         "success": true,         "message": "category updated successfully",         "data":    category,     }) } 
登录后复制

销毁方法

func (r *categorycontroller) destroy(ctx http.context) http.response {  // find the category by id  var category models.category  facades.orm().query().find(&category, ctx.request().input("id"))  res, err := facades.orm().query().delete(&category)  // return error if there is any  if err != nil {   return ctx.response().json(http.statusinternalservererror, http.json{   "error": err.error(),   })  }  // return success if successfull  return ctx.response().success().json(http.json{   "success": true,   "message": "category deleted successfully",   "data":    res,  }) } 
登录后复制

现在我们需要设置数据库,我将使用 ,重要的是要注意 gravel 附带了多个数据库驱动程序。找到您的 .env 文件并编辑以下行:

db_connection=mysql db_host=127.0.0.1 db_port=3306 db_database=database_name db_username=database_username db_password=database_password 
登录后复制

然后在您的终端中输入:

go run . artisan migrate 
登录后复制

这将自动迁移数据库中的类别表。

现在,如果您之前正在运行我们的服务器,我们需要停止它并重新启动它。

您现在可以从 postman 测试您的端点,您应该注意,通过将资源添加到类别端点,您现在可以访问类别端点的 get、post、put 或 delete 方法。您可以通过以下方式访问您的端点:

// GET category http://localhost:3000/category  //POST catgory - with payload http://localhost:3000/category {     "name": "goravel" }  // PUT category - with payload http://localhost:3000/category/{id} {     "id": 1,     "name": "laravel" }  //DELETE category http://localhost:3000/category/{id} 
登录后复制

这就是如何使用 goravel 进行简单的 crud 操作。

以上就是使用 Goravel 进行 CRUD 操作 (Laravel for GO)的详细内容,更多请关注php中文网其它相关文章!

本文来自网络,不代表甲倪知识立场,转载请注明出处:http://www.spjiani.cn/wp/3173.html

作者: nijia

发表评论

您的电子邮箱地址不会被公开。

联系我们

联系我们

0898-88881688

在线咨询: QQ交谈

邮箱: email@wangzhan.com

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部