Operasi CRUD dengan Goravel (Laravel untuk GO)

Linda Hamilton
Lepaskan: 2024-10-08 06:14:01
asal
965 orang telah melayarinya

CRUD Operations with Goravel (Laravel for GO)

Mengenai Goravel

Goravel ialah rangka kerja aplikasi web dengan fungsi lengkap dan kebolehskalaan yang sangat baik, sebagai perancah permulaan untuk membantu Gopher membina aplikasi mereka sendiri dengan pantas.

Goravel ialah klon sempurna pembangun Laravel for Go, yang bermaksud pembangun PHP seperti saya boleh dengan mudah mengaitkan rangka kerja dan mula menulis dengan sedikit pembelajaran untuk dilakukan.

Mari kita mulakan dengan pemasangan, anda boleh mengikuti artikel ini untuk memasang atau melawati tapak web dokumentasi rasmi 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 .
Salin selepas log masuk

Apabila membuka kod dalam editor teks kegemaran anda, anda akan melihat bahawa struktur projek betul-betul seperti Laravel, jadi pembangun Laravel tidak akan berasa begitu kehilangan.

Model, Migrasi dan Pengawal

Untuk mencipta model, migrasi dan pengawal, kita boleh menggunakan perintah artisan seperti yang kita lakukan dalam 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
Salin selepas log masuk

Sekarang jika kita menyemak folder pangkalan data/penghijrahan kita akan melihat bahawa fail telah dibuat untuk kita, fail atas dan bawah, buka fail migrasi ke atas dan tampal kod di bawah di dalam:

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;
Salin selepas log masuk

Jika kami menyemak di dalam folder app/http/controllers, kami akan mempunyai fail category_controller.go dan kandungan di dalamnya sepatutnya kelihatan seperti yang kami ada di bawah:

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
}
Salin selepas log masuk

Kemudian, mari kita cari fail model kategori di dalam app/http/model , kemudian tampal kod di bawah di dalam:

package models

import (
 "github.com/goravel/framework/database/orm"
)

type Category struct {
 orm.Model
 Name string
}
Salin selepas log masuk

Tiada banyak perkara yang berlaku di sini, kami hanya mengisytiharkan kami boleh diisi dengan jenis data mereka.

Mari cari fail api.php kami di dalam folder laluan dan kemas kini kod supaya kelihatan seperti di bawah:

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)
}
Salin selepas log masuk

Sekarang, mari kemas kini import kami di dalam fail category_controller.go dan kemas kini ke bawah:

import (
 "goravel/app/models"
 "github.com/goravel/framework/contracts/http"
  "github.com/goravel/framework/facades"
)
Salin selepas log masuk

Kami baru sahaja mengimport model dan fasad kami, fasad membolehkan kami mempunyai akses kepada banyak perkara berguna yang menarik seperti Pengesahan, orm, dsb. orm ialah ORM untuk GO.

Masa untuk menulis beberapa kod!

Mari kemas kini kaedah kami dalam pengawal kami kepada kod di bawah:

Kaedah Indeks

// 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,
 })
} 
Salin selepas log masuk

Kaedah Stor

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,
 })
}
Salin selepas log masuk

Kaedah Kemas Kini

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,
    })
}
Salin selepas log masuk

Kaedah Musnah

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,
 })
}
Salin selepas log masuk

Sekarang kita perlu menyediakan pangkalan data, saya akan menggunakan MySQL, adalah penting untuk ambil perhatian kapal kerikil dengan beberapa pemacu pangkalan data. cari fail .env anda dan edit baris ini di bawah:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=DATABASE_NAME
DB_USERNAME=DATABASE_USERNAME
DB_PASSWORD=DATABASE_PASSWORD
Salin selepas log masuk

Kemudian dalam taip terminal anda:

go run . artisan migrate
Salin selepas log masuk

Ini akan memindahkan jadual kategori kami secara automatik dalam DB kami.

Sekarang kami perlu menghentikan pelayan kami jika anda menjalankannya sebelum ini dan mulakan semula.

Kini anda boleh menguji titik akhir anda daripada Posmen anda harus ambil perhatian bahawa dengan menambahkan sumber pada titik akhir kategori anda kini mempunyai akses kepada kaedah GET, POST, PUT atau DELETE untuk titik akhir kategori anda. anda boleh mengakses titik akhir anda dengan cara ini:

// 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}
Salin selepas log masuk

Begitulah anda membuat operasi CRUD mudah menggunakan Goravel.

Atas ialah kandungan terperinci Operasi CRUD dengan Goravel (Laravel untuk GO). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!