v1.15 dan v1.16 ga yangilash
Qiziqarli Yangi Imkoniyatlar 🎉
- facades.DB() qo'shish
- facades.Http() qo'shish
- facades.Queue() ni qayta qurish
- facades.Auth() maxsus haydovchini qo'llab-quvvatlaydi
- make:* buyruqlari avtomatik ro'yxatdan o'tkazishni qo'llab-quvvatlaydi
- Goravel o'rnatuvchisi haydovchini tanlashni qo'llab-quvvatlaydi
Yaxshilanishlar 🚀
- Ma'lumotlar bazasi haydovchini ajratish
- Orm imkoniyatlar qo'shadi
- Ma'lumotlar jadvali asosida Model yaratishni qo'llab-quvvatlash
- Ish vaqtida dinamik SQL bayonotini qo'llab-quvvatlash
- Migratsiya imkoniyatlar qo'shadi
- Grpc Shutdown usulini qo'shadi
- Artisan ranglarni chop etishni o'chirish variantini qo'shadi
- Env faylini shifrlash va shifrdan ochish
- Elektron pochta yuborish Header ni sozlashni qo'llab-quvvatlaydi
- O'rnatuvchi o'zini yangilashni qo'llab-quvvatlaydi
- Lokalizatsiya embed yuklashni qo'llab-quvvatlaydi
- Jadval imkoniyatlar qo'shadi
- So'rov imkoniyatlar qo'shadi
- Marshrut imkoniyatlar qo'shadi
- Testing Cache tasvirini yaratishni qo'llab-quvvatlaydi
- Turli JWT Guard turli konfiguratsiyalarni qo'llab-quvvatlaydi
- ServiceProvider endi tartibga bog'liq emas
O'zgartirishlar (Breaking Changes) 🛠
- SQL Migratsiyani olib tashlash
- Config moduli usullari standart qiymat turini optimallashtirish
- Orm usullarini optimallashtirish
- Path usullarini optimallashtirish
- Request usullarini optimallashtirish
- console Confirm usullarini optimallashtirish
- Session maxsus haydovchini optimallashtirish
- Testing.Request usullarini optimallashtirish
- Carbon usullarini optimallashtirish
- str.Snake usullarini optimallashtirish
- goravel/cloudinary endi qo'llab-quvvatlanmaydi
v1.16.1
- Elektron pochta yuborishda bcc va cc ni kutilganidek o‘rnatib bo‘lmasligini tuzatish
- Navbat orqali elektron pochta yuborish noto‘g‘ri xatoni qaytarishini tuzatish
- ORM yaratish hodisalari bir nechta yozuv yaratishda ishga tushirilishi mumkinligini tuzatish
- make:package buyrug‘i noto‘g‘ri kod generatsiya qilishini tuzatish
- Paket fayllarini nashr qilishda yo‘l noto‘g‘ri ekanligini tuzatish
v1.16.3
- Yopilishda panic sodir bo‘lsa, Transaction orqaga qaytarilmasligini tuzatish
- Alohida migratsiya skripti bilan ustun qo‘shish yoki o‘chirishda xatoliklar yuzaga kelishini tuzatish
- ORM Select metodining buziluvchi o‘zgarishini tuzatish
v1.16.4
v1.16.5
v1.16.6
- Yangilangan ormda DB keshi qayta o‘rnatilmasligini tuzatish
- Kundalik loggerda log fayl aylanishi muammosini tuzatish
- Faqat bitta ustunni tanlab va nomini o‘zgartirganda paginate metodi xatolik xabar qilishini tuzatish
- Cursor json ustunini skaner qilolmasligini tuzatish
v1.16.7
- Distinct Count bilan ishlatilganda ta’sir ko‘rsatmasligini tuzatish
- DB.Insert kutilganidek null ustunlar bilan ishlay olmasligi
- Noto‘g‘ri orm ichki bog‘lanishlarni yuklashni tuzatish
v1.16.8
Yangilash Qo'llanmasi
Golang v1.22 endi qo'llab-quvvatlanmayganligi sababli, Goravelning qo'llab-quvvatlaydigan Golang versiyasi 1.22 dan 1.23 ga yangilandi.
goravel/example loyihasini v1.15 dan v1.16 ga o'tkazish PR yangilash uchun namuna sifatida foydalanish mumkin: goravel/example#68.
1. Bog'liqliklarni Yangilash
go get github.com/goravel/framework@latest
// Agar gin ishlatilsa
go get github.com/goravel/gin@latest
// Agar fiber ishlatilsa
go get github.com/goravel/fiber@latest
// Agar redis ishlatilsa
go get github.com/goravel/redis@latest
// Agar S3 ishlatilsa
go get github.com/goravel/s3@latest
// Agar Oss ishlatilsa
go get github.com/goravel/oss@latest
// Agar Cos ishlatilsa
go get github.com/goravel/cos@latest
// Agar Minio ishlatilsa
go get github.com/goravel/minio@latest
go mod tidy2. Ma'lumotlar Bazasi Konfiguratsiyasini O'zgartirish
Ma'lumotlar bazasi konfiguratsiya fayli config/database.go dagi kerak bo'lmagan connections larni o'chiring va sizga kerak bo'lgan ma'lumotlar bazasi haydovchisini o'rnating.
Masalan, Postgres:
- Haydovchi paketini o'rnating
go get github.com/goravel/postgresconfig/app.gofayligapostgres.ServiceProviderni qo'shing
// config/app.go
import "github.com/goravel/postgres"
"providers": []foundation.ServiceProvider{
...
&postgres.ServiceProvider{},
},config/database.gofaylidagi konfiguratsiyani o'zgartiring
// config/database.go
import (
"github.com/goravel/framework/contracts/database/driver"
postgresfacades "github.com/goravel/postgres/facades"
)
"connections": map[string]any{
"postgres": map[string]any{
...
++ "via": func() (driver.Driver, error) {
++ return postgresfacades.Postgres("postgres")
++ },
},
},3. auth.go konfiguratsiya faylini o'zgartirish
// config/auth.go
// Qo'llab-quvvatlanadi: "jwt"
"guards": map[string]any{
"user": map[string]any{
"driver": "jwt",
++ "provider": "user",
},
},
++ // Qo'llab-quvvatlanadi: "orm"
++ "providers": map[string]any{
++ "user": map[string]any{
++ "driver": "orm",
++ },
++ },4. session.go konfiguratsiya faylini o'zgartirish
// config/session.go
-- "driver": config.Env("SESSION_DRIVER", "file"),
++ "default": config.Env("SESSION_DRIVER", "file"),
++ "drivers": map[string]any{
++ "file": map[string]any{
++ "driver": "file",
++ },
++ },5. queue.go konfiguratsiya faylini o'zgartirish
Agar Queue modulining Redis haydovchisidan foydalanayotgan bo'lsangiz, shunga mos ravishda o'zgartirishingiz kerak: Queue moduli konfiguratsiyasini optimallashtirish.
Agar foydalanmayotgan bo'lsangiz yoki kelajakda ma'lumotlar bazasi haydovchisidan foydalanishni istasangiz,
config/queue.gofaylidagi konfiguratsiyani o'zgartirishingiz kerak:
// config/queue.go
-- // Haydovchilar: "sync", "redis"
++ // Haydovchilar: "sync", "database", "custom"
"connections": map[string]any{
"sync": map[string]any{
"driver": "sync",
},
-- "redis": map[string]any{
-- "driver": "redis",
-- "connection": "default",
-- "queue": config.Env("REDIS_QUEUE", "default"),
-- },
++ "database": map[string]any{
++ "driver": "database",
++ "connection": "postgres",
++ "queue": "default",
++ "concurrent": 1,
++ },
},
++ "failed": map[string]any{
++ "database": config.Env("DB_CONNECTION", "postgres"),
++ "table": "failed_jobs",
++ },Ma'lumotlar bazasi haydovchisi uchun talab qilinadigan migratsiya faylini qo'shing: database/migrations/20210101000002_create_jobs_table.go, va migratsiya faylini database/kernel.go faylida ro'yxatdan o'tkazing.
6. Agar HTTP Client dan foydalanish kerak bo'lsa
config/http.go faylida HTTP Client konfiguratsiya bandini qo'shing:
// config/http.go
++ "client": map[string]any{
++ "base_url": config.GetString("HTTP_CLIENT_BASE_URL"),
++ "timeout": config.GetDuration("HTTP_CLIENT_TIMEOUT"),
++ "max_idle_conns": config.GetInt("HTTP_CLIENT_MAX_IDLE_CONNS"),
++ "max_idle_conns_per_host": config.GetInt("HTTP_CLIENT_MAX_IDLE_CONNS_PER_HOST"),
++ "max_conns_per_host": config.GetInt("HTTP_CLIENT_MAX_CONN_PER_HOST"),
++ "idle_conn_timeout": config.GetDuration("HTTP_CLIENT_IDLE_CONN_TIMEOUT"),
++ },7. Agar goravel/redis drayveridan foydalanilsa
config/cache.go faylidagi konfiguratsiyani o'zgartirish kerak:
// config/cache.go
"redis": map[string]any{
"driver": "custom",
"connection": "default",
"via": func() (cache.Driver, error) {
-- return redisfacades.Redis("redis"), nil
++ return redisfacades.Cache("redis")
},
},8. Agar carbon.DateTime va boshqa usullardan foydalanilsa
Shunga mos ravishda o'zgartirish kerak: Carbon usullarini optimallashtirish
9. Agar sessiyaning maxsus drayveridan foydalanilsa
Shunga mos ravishda o'zgartirish kerak: Sessiya maxsus drayverini optimallashtirish
10. Agar facades.Config() usullaridan foydalanilsa
Shunga mos ravishda o'zgartirish kerak: Config moduli usullarining standart qiymat turini o'zgartirish
11. Agar SQL Migratsiyalari ishlatilsa
Shunga mos ravishda o'zgartirish kerak: SQL Migratsiyasini olib tashlash
12. Agar Orm ishlatilsa
Shunga mos ravishda o'zgartirish kerak: Orm usullarini optimallashtirish
13. Agar Path usuli ishlatilsa
path usuli mutlaq yo'lni qaytaradi, agar siz undan foydalanayotgan bo'lsangiz, o'zgartirish kerakligini tekshirishingiz kerak: Path usulini optimallashtirish
14. Agar ctx.Request().InputMap usuli ishlatilsa
Shunga mos ravishda o'zgartirish kerak: Request usulini optimallashtirish
15. Agar console.Confirm usuli ishlatilsa
Shunga mos ravishda o'zgartirish kerak: console Confirm usulini optimallashtirish
16. Agar Testing.Request usuli ishlatilsa
Shunga mos ravishda o'zgartirish kerak: Testing.Request usulini optimallashtirish
Xususiyatlar tanitimi
facades.DB() qo'shildi
facades.DB() moduli qo'shildi, bu mahalliy ma'lumotlar bazasi operatsiyalarini bajarish uchun qulay, ORM dan tezroq.
facades.Http() qo'shildi
facades.Http() moduli qo'shildi, bu HTTP operatsiyalarini bajarish uchun qulay.
facades.Queue() qayta qurildi
v1.15 dan oldin Queue faqat sinxron va Redis drayverlarini qo'llab-quvvatlagan, v1.16 dan boshlab u ma'lumotlar bazasi va maxsus drayverni qo'llab-quvvatlaydi.
jobsvafailed_jobsjadvali qo'shildi, vazifalar va muvaffaqiyatsiz vazifalarni saqlash uchun ishlatiladi.queue:retrybuyrug'i qo'shildi, muvaffaqiyatsiz vazifalarni qayta urinish uchun ishlatiladi.queue:failedbuyrug'i qo'shildi, muvaffaqiyatsiz vazifalarni ko'rish uchun ishlatiladi.Navbat vazifasini ishga tushirishda qayta urinishlar sonini sozlash qo'llab-quvvatlanadi.
facades.Auth() maxsus drayverni qo'llab-quvvatlaydi
v1.15 dan oldin Auth faqat JWT drayverini qo'llab-quvvatlagan, v1.16 dan boshlab u Sessiya va maxsus drayverni qo'llab-quvvatlaydi, iltimos hujjatni ko'ring.
make:* buyruqlari avtomatik ro'yxatdan o'tishni qo'llab-quvvatlaydi
make:migration va make:seeder va hokazo buyruqlar tomonidan yaratilgan fayllar yaratilgandan so'ng avtomatik ravishda freymvorkga ro'yxatdan o'tkaziladi, endi avvalgidek qo'lda ro'yxatdan o'tkazish shart emas.
Goravel Installer drayver tanlashni qo'llab-quvvatlaydi
Goravel Installer yordamida yangi loyiha o'rnatayotganda, turli drayverlarni tanlashingiz mumkin, masalan: goravel/gin yoki goravel/fiber va hokazolarni o'rnatishni tanlashingiz mumkin.
Ma'lumotlar bazasi drayveri ajratildi
Ilgari bir nechta ma'lumotlar bazasi drayverlari freymvorkda birlashtirilgan edi, bu dastur to'plami hajmini oshirdi. v1.16 dan boshlab, ma'lumotlar bazasi drayveri alohida paket bo'ladi, shuning uchun sizga faqat kerakli ma'lumotlar bazasi drayverini o'rnatish kerak.
| Ma'lumotlar bazasi turi | Drayver paketi |
|---|---|
| Postgres | github.com/goravel/postgres |
| MySQL | github.com/goravel/mysql |
| Sqlserver | github.com/goravel/sqlserver |
| SQLite | github.com/goravel/sqlite |
Orm ga xususiyatlar qo'shildi
JSON maydonlarini so'rov qilish qo'llab-quvvatlanadi, hujjatni ko'ring.
JSON maydonlarini yangilash qo'llab-quvvatlanadi, hujjatni ko'ring.
Model
GlobalScopeusulini sozlashni qo'llab-quvvatlaydi, bu so'rov, yangilash va o'chirish operatsiyalarining doirasini cheklaydi:
import "github.com/goravel/framework/contracts/orm"
type User struct {
orm.Model
Name string
}
func (r *User) GlobalScopes() []func(orm.Query) orm.Query {
return []func(orm.Query) orm.Query{
func(query orm.Query) orm.Query {
return query.Where("name", "goravel")
},
}
}Ma'lumotlar jadvali asosida Model yaratish qo'llab-quvvatlanadi
make:model buyrug'iga --table opsiyasi qo'shildi, ma'lumotlar jadvali asosida Model yaratish uchun ishlatiladi:
./artisan make:model --table=users User
// Agar Model allaqachon mavjud bo'lsa, -f opsiyasidan foydalanib majburan ustidan yozishingiz mumkin
./artisan make:model --table=users -f UserIsh vaqtida dinamik SQL bayonotini qo'llab-quvvatlash
EnableQueryLog usuli qo'shildi, so'rov jurnalini yoqish uchun ishlatiladi:
ctx := db.EnableQueryLog(ctx)
facades.Orm().WithContext(ctx).Query()
facades.DB().WithContext(ctx).Table()
queryLogs := db.GetQueryLog(ctx)
ctx := db.DisableQueryLog(ctx)Migratsiyaga xususiyatlar qo'shildi
- Jadval tuzilishini o'zgartirish uchun
Changeusuli qo'shildi (Postgres, MySQL, Sqlserver uchun qo'llaniladi):
table.String("name").Change()- Jadval ustunini nomini o'zgartirish uchun
RenameColumnusuli qo'shildi:
table.RenameColumn("old_name", "new_name")- Jadvalga izoh qo'shish uchun
Commentusuli qo'shildi (Postgres, MySQL uchun qo'llaniladi):
table.Comment("user table")- Maydonni jadvalning birinchi maydoni sifatida belgilash uchun
Firstusuli qo'shildi (MySQL uchun qo'llaniladi):
table.String("name").First()Afterusulini qo'shing, maydonni jadvalning oxirgi maydoni sifatida o'rnatish uchun (MySQL uchun qo'llaniladi):
table.String("name").After("id")Morphs,NullableMorphs,NumericMorphs,UuidMorphs,UlidMorphsusullarini qo'shing, polimorfik bog'lanish maydonlarini yaratish uchun ishlatiladi:
table.Morphs("morphable")
// morphable_type, morphable_idUuid,Ulidusullarini qo'shing, UUID va ULID maydonlarini yaratish uchun ishlatiladi:
table.Uuid("uuid")
table.Ulid("ulid")GeneratedAsvaAlwaysusullarini qo'shing, generatsiyalangan ustunlarni yaratish uchun ishlatiladi (faqat PostgreSQL):
table.String("name").GeneratedAs().Always()Grpc Shutdown usulini qo'shadi
Grpc-ni yumshatib o'chirish uchun Shutdown usulini qo'shing, Hujjatni ko'ring.
Artisan ranglarni chop etishni o'chirish opsiyasini qo'shadi
Ba'zi buyruqlar standart ravishda ranglarni chiqaradi, masalan, list buyrug'i. Biroq, ba'zi terminal yoki jurnallarda rang qiymatlari noto'g'ri ko'rsatilishi mumkin. Siz chop ranglarini o'chirish uchun --no-ansi opsiyasidan foydalanishingiz mumkin:
go run . artisan list --no-ansiEnv faylini shifrlash va shifrdan ochish
Ishlab chiqarish muhiti env faylini versiya nazoratiga qo'shmoqchi bo'lishingiz mumkin, lekin sezuvchi ma'lumotlarni ochib bermaslik uchun, siz env faylini shifrlashingiz va shifrdan ochishingiz mumkin:
Elektron pochta yuborish Header-ni o'rnatishni qo'llab-quvvatlaydi
Elektron pochta Header-ni o'rnatish uchun ishlatiladigan Headers usulini qo'shing.
facades.Mail().Headers(map[string]string{"X-Mailer": "Goravel"})O'rnatuvchi o'zini yangilashni qo'llab-quvvatlaydi
goravel/installer upgrade buyrug'ini qo'shadi, bu o'rnatuvchini o'zini yangilash uchun ishlatiladi:
goravel upgrade
goravel upgrade v1.1.1Lokalizatsiya embed yuklashni qo'llab-quvvatlaydi
Embed yuklashdan foydalanilganda, til fayllari ikkilik faylga kompilyatsiya qilinadi va endi ularni joylashtirish shart emas.
Jadval xususiyatlarni qo'shadi
EverySecondusulini va boshqalarni qo'shing, iltimos hujjatni ko'ring.Vazifalarni qo'lda ishga tushirish uchun ishlatiladigan
schedule:runbuyrug'ini qo'shing.Barcha vazifalarni ko'rish uchun ishlatiladigan
schedule:listusulini qo'shing.
So'rov xususiyatlarni qo'shadi
- v1.15 dan oldin, quyidagi
Requestbog'lash xatolikni bildiradi, v1.16 dan boshlab, u bir nechta fayllarni bog'lashni qo'llab-quvvatlaydi:
type StoreMediaRequest struct {
Files []*multipart.FileHeader `form:"files" json:"files"`
}- Asl marshrut yo'lini olish uchun ishlatiladigan
OriginPathusulini qo'shing:
ctx.Request().OriginPath()- Marshrut ma'lumotlarini olish uchun ishlatiladigan
Infousulini qo'shing:
info := ctx.Request().Info()- Marshrut nomini olish uchun ishlatiladigan
Nameusulini qo'shing:
name := ctx.Request().Name()http.request_timeoutkonfiguratsiya elementi0ga o'rnatilganda, so'rov vaqt chegarasiz bo'ladi.
Marshrut xususiyatlarni qo'shadi
- Barcha marshrutlarni olish uchun ishlatiladigan
GetRoutesusulini qo'shing:
routes := facades.Route().GetRoutes()- Marshrut nomini o'rnatish uchun ishlatiladigan
Nameusulini qo'shing:
facades.Route().Get("users", usersController.Index).Name("users.index")Keyin siz marshrut ma'lumotlarini olish uchun Info usulidan foydalanishingiz mumkin:
route := facades.Route().Info("users.index")- Barcha marshrutlarni ko'rish uchun ishlatiladigan
route:listbuyrug'ini qo'shing:
./artisan route:listTesting Cache tasvirini yaratishni qo'llab-quvvatlaydi
Cache tasvirini yaratish uchun ishlatiladigan Cache usulini qo'shing:
cache, err := facades.Testing().Docker().Cache()Har xil JWT Guard har xil konfiguratsiyalarni qo'llab-quvvatlaydi
v1.15 dan oldin, JWT Guard ning ttl va secret konfiguratsiya elementlari global konfiguratsiyalar edi, v1.16 dan boshlab, siz har xil JWT Guardlar uchun har xil ttl va secret o'rnatishingiz mumkin, Hujjatni ko'ring.
ServiceProvider endi tartibga bog'liq emas
ServiceProvider joriy ServicerProvider ning bog'liqlik munosabatini e'lon qilish uchun ishlatiladigan ixtiyoriy usul Relationship() binding.Relationship ni qo'shadi, ushbu usulni o'rnatgan ServiceProvider ro'yxatga olish tartibiga bog'liq bo'lmaydi, va uni o'rnatmagan ServiceProvider oxirgi ro'yxatga olinadi, masalan:
type ServiceProvider struct {
}
func (r *ServiceProvider) Relationship() binding.Relationship {
return binding.Relationship{
Bindings: []string{
BindingSession,
},
Dependencies: []string{
binding.Config,
},
ProvideFor: []string{
binding.Cache,
},
}
}
func (r *ServiceProvider) Register(app foundation.Application) {}
func (r *ServiceProvider) Boot(app foundation.Application) {}SQL Migratsiyasini olib tashlash
SQL migratsiyalari butunlay olib tashlandi, iltimos Go tilidagi migratsiyalardan foydalaning. Migratsiya qadamları:
config/database.godagimigrations.driverkalitini olib tashlang;
// config/database.go
"migrations": map[string]any{
-- "driver": "sql",
"table": "migrations",
},database/migrationskatalogidagi SQL migratsiya fayllarini Go tilidagi migratsiya fayllariga aylantiring:
// Up Migratsiyalarni ishga tushiring.
func (r *M20241207095921CreateUsersTable) Up() error {
return facades.Schema().Sql({Original SQL})
}
// Down Migratsiyalarni teskari aylantiring.
func (r *M20241207095921CreateUsersTable) Down() error {
return facades.Schema().Sql({Original SQL})
}- Migratsiya fayllarini
database/kernel.gofaylida ro'yxatdan o'tkazing;
Config moduli usullari standart qiymat turini optimallashtirish
Config modulining GetString、GetInt、GetBool usullari oldin standart qiymat turi any edi, v1.16 dan boshlab, standart qiymat turi string、int、bool ga o'zgartirildi, tur xavfsizligini ta'minlash uchun.
-- GetString(path string, defaultValue ...any) string
++ GetString(path string, defaultValue ...string) string
-- GetInt(path string, defaultValue ...any) int
++ GetInt(path string, defaultValue ...int) int
-- GetBool(path string, defaultValue ...any) bool
++ GetBool(path string, defaultValue ...bool) boolOrm usullarini optimallashtirish
Count,Existsusullarining qaytariladigan qiymatini optimallashtirish:
-- Count(count *int64) error
++ Count() (int64, error)
-- Distinct(args ...any) Query
++ Distinct(columns ...string) Query
-- Exists(exists *bool) error
++ Exists() (bool, error)
-- Select(query any, args ...any) Query
++ Select(columns ...string) Query
-- Sum(column string, dest any) error
++ Sum(column string) (int64, error)Whereusuli yopilishlarni qo'llab-quvvatlaydi:
facades.Orm().Query().Where(func(query orm.Query) orm.Query {
return query.Where("height", 180).Where("age", 18)
}).FindOrFail(&user, 100)
// SELECT * FROM users WHERE id = 100 AND (height = 180 AND age = 18);Path usullarini optimallashtirish
Resourceusulini qo'shing
path.Resource("views/welcome.tmpl")pathusuli mutlaq yo'lni qaytaradi
Ilgari path usuli ildiz katalogining nisbiy yo'lini qaytarar edi, masalan, path.Config("app.go") == config/app.go. v1.16 dan boshlab, path usuli mutlaq yo'lni qaytaradi, masalan, path.Config("app.go") == /Users/goravel/workspace/goravel/config/app.go.
So'rov usullarini optimallashtirish
InputMapusulining standart qiymat turini o'zgartirish:
-- ctx.Request().InputMap(key string, defaultValue ...map[string]string) map[string]string
++ ctx.Request().InputMap(key string, defaultValue ...map[string]any) map[string]anyInputMapArrayusulini qo'shish, bu Mapning massiv turini olish uchun ishlatiladi:
ctx.Request().InputMapArray(key string, defaultValue ...[]map[string]any) []map[string]anyFilesusulini qo'shish, bu bir nechta fayllarni olish uchun ishlatiladi:
ctx.Request().Files(name string) ([]filesystem.File, error)Konsol Confirm usullarini optimallashtirish
Confirm usulining qaytarish qiymatini o'zgartirish, aniqlash mantiqini soddalashtirish:
-- Confirm(question string, option ...ConfirmOption) (bool, error)
++ Confirm(question string, option ...ConfirmOption) boolSession maxsus haydovchisini optimallashtirish
Ilgari siz haydovchini facades.Session().Extend usuli orqali ro'yxatdan o'tkazishingiz kerak edi. v1.16 dan boshlab, siz uni faqat config/session.go konfiguratsiya fayliga qo‘shishingiz kerak:
// app/providers/app_service_provider.go
-- facades.Session().Extend("custom", func() session.Driver {
-- return &CustomDriver{}
-- })
// config/session.go
"drivers": map[string]any{
"custom": map[string]any{
"driver": "custom",
"via": func() (session.Driver, error) {
return &CustomDriver{}, nil
},
}
},Testing.Request usullarini optimallashtirish
WithCookies va WithCookie usullarining parametrlarini optimallashtirish:
-- WithCookies(cookies map[string]string) Request
++ WithCookies(cookies []*http.Cookie) Request
-- WithCookie(key, value string) Request
++ WithCookie(cookie *http.Cookie) RequestCarbon usullarini optimallashtirish
Ilgari carbon.NewDateTime va boshqa usullar struktura namunasi qaytarar edi, v1.16 dan boshlab, ular ko'rsatkich qaytaradi, agar siz carbon.DateTime turini va boshqalarni aniqlagan bo'lsangiz, uni *carbon.DateTime va boshqa ko'rsatkich turiga o'zgartirishingiz kerak.
str.Snake usullarini optimallashtirish
str.Snake usuli ilgari userID ni user_i_d ga o'zgartiradi edi, v1.16 dan boshlab, u user_id ga o'zgartiriladi.
goravel/cloudinary endi qo'llab-quvvatlanmaydi
goravel/cloudinary endi qo'llab-quvvatlanmaydi, iltimos, goravel/s3 yoki boshqa haydovchilardan foydalaning.
Navbat moduli konfiguratsiyasini optimallashtirish
v1.15 dan oldin, Navbat modulining Redis haydovchisi RichardKnop/machinery yordamida amalga oshirilgan edi. v1.16 dan boshlab, Redis haydovchisi rasmiy ravishda goravel/redis da qo‘llab-quvvatlanadi.
Siz v1.16 da hali ham Machinery haydovchisidan foydalanishingiz mumkin, lekin u v1.17 da olib tashlanadi, Redis haydovchisidan foydalanish tavsiya etiladi. Quyida ikkita yangilash usuli taqdim etilgan:
Machinery haydovchisidan foydalanishni davom ettirish
config/queue.go faylidagi konfiguratsiyani o'zgartirish:
// config/queue.go
"connections": map[string]any{
...
"redis": map[string]any{
-- "driver": "redis",
++ "driver": "machinery",
"connection": "default",
"queue": config.Env("REDIS_QUEUE", "default"),
}
},Redis navbat haydovchisidan foydalanish
config/queue.go faylidagi konfiguratsiyani o'zgartirish:
// config/queue.go
import (
"github.com/goravel/framework/contracts/queue"
redisfacades "github.com/goravel/redis/facades"
)
"connections": map[string]any{
...
"redis": map[string]any{
-- "driver": "redis",
++ "driver": "custom",
"connection": "default",
"queue": config.Env("REDIS_QUEUE", "default"),
++ "via": func() (queue.Driver, error) {
++ return redisfacades.Queue("redis") // ` + "`redis`" + ` qiymati ` + "`connections`" + ` ning kalitidir
++ },
},
},Yangi Redis navbat haydovchisi va asl Machinery navbat haydovchisi vazifalari bir xil Redisda saqlanadi, lekin turli navbat nomlaridan foydalanadi. Yangi Redis navbat haydovchisiga o‘tsangiz ham, framework Machinerydagi barcha vazifalar tugaguncha asl Machinery navbat haydovchisi vazifalarini o‘qishni davom ettiradi. Shu bilan birga, yangi navbat vazifalari endi Machinery navbatiga yozilmaydi, balki yangi Redis navbatiga yoziladi va yangi Redis navbat haydovchisi tomonidan iste’mol qilinadi. Ikki haydovchi o‘rtasida uzluksiz o‘tishni amalga oshirish uchun.
Ikkala haydovchi ma’lumotlarini Redisdan tekshirib, ularning to‘g‘ri yozilgan va iste’mol qilinganligini ko‘rishingiz mumkin:
redis-cli
# Redisdagi barcha kalitlarni olish
keys
# Machinery navbat haydovchisi ma’lumotlarini ko‘rish ({} ni qiymat bilan almashtiring)
LRANGE {app_name}_queues:{queue_name} 0 -1
# Redis navbat haydovchisi ma’lumotlarini ko‘rish ({} ni qiymat bilan almashtiring)
LRANGE {app_name}_queues:{connection}_{queue} 0 -1Elektron pochta yuborishda bcc va cc ni kutilganidek o‘rnatib bo‘lmasligini tuzatish
goravel/framework: v1.16.1
Muammo: #737
Navbat orqali elektron pochta yuborish noto‘g‘ri xatoni qaytarishini tuzatish
goravel/framework: v1.16.1
PR: #1148
ORM yaratish hodisalari bir nechta yozuv yaratishda ishga tushirilishi mumkinligini tuzatish
goravel/framework: v1.16.1
Muammo: #738
make:package buyrug‘i noto‘g‘ri kod generatsiya qilishini tuzatish
goravel/framework: v1.16.1
Muammo: #743
Paket fayllarini nashr qilishda yo‘l noto‘g‘ri ekanligini tuzatish
goravel/framework: v1.16.1
Muammo: #749
Yopilishda panic sodir bo‘lsa, Transaction orqaga qaytarilmasligini tuzatish
goravel/framework: v1.16.3
Muammo: #762
Alohida migratsiya skripti bilan ustun qo‘shish yoki o‘chirishda xatoliklar yuzaga kelishini tuzatish
goravel/framework: v1.16.3
goravel/postgres: v1.4.1
Agar alohida migratsiya skripti orqali ustun qo‘shilsa yoki o‘chirilsa va ilova qayta ishga tushmasa, quyidagi ikkita xato yuzaga keladi:
- DB fasadida panic yuzaga keladi.
- Postgres haydovchisi xatolikni xabar qiladi:
cached plan must not change result type.
Muammo: #768
Orm Select metodidagi buziluvchi o‘zgartirishni tuzatish
goravel/framework: v1.16.3
Orm Select metodini v1.15 dan v1.16 ga yangilashda buziluvchi o‘zgartirish mavjud. Select endi db.Raw() ni qo‘llab-quvvatlamaydi, shuning uchun buziluvchi o‘zgartirishdan qochish uchun yangi SelectRaw metodi qo‘shildi.
Muammo: #770
Buyruqlarni bir vaqtda ishga tushirib bo‘lmasligini tuzatish
goravel/framework: v1.16.4
Schedule modulida buyruqlarni bir vaqtda ishga tushirganda, bir vaqtda yozishlar tufayli tartibsizlik yoki panic yuzaga kelishi mumkin.
Navbat kutilganidek to‘xtatilmasligini tuzatish
goravel/framework: v1.16.5
Ilgari, Navbat ishchisi ishlayotganda, SIGTERM signalini yuborish ishchini darhol to‘xtatardi. Hozir joriy vazifa tugagunicha kutib, keyin to‘xtatilishi tuzatildi.
Muammo: #807
Yangilangan ormda DB keshi qayta o‘rnatilmasligini tuzatish
goravel/framework: v1.16.6
facades.Orm().Fresh() chaqirilganda ma’lumotlar bazasi ulanishi keshi to‘g‘ri qayta o‘rnatilmasligi muammosini tuzatish, bu ORM yangilangandan so‘ng eskirgan ulanishlardan foydalanishga olib kelishi mumkin edi.
Muammo: #840
Kundalik loggerda log fayl aylanishi muammosini tuzatish
goravel/framework: v1.16.6
Kundalik log aylanishi to‘g‘ri ishlamasligi muammosini tuzatish, chunki ilovani qayta ishga tushirmasdan kun uchun yangi log fayli yaratilmasdi.
Muammo: #847
Faqat bitta ustunni tanlab va nomini o‘zgartirganda paginate metodi xatolik xabar qilishini tuzatish
goravel/framework: v1.16.6
Faqat bitta ustunni tanlab va nomini o‘zgartirganda Paginate metodi xatolik xabar qilish muammosini tuzatish. Tuzatish paginatsiya paytida maxsus tanlangan ustunlar hisoblash amallariga xalaqit bermasligini ta’minlaydi.
Muammo: #842
Cursor json ustunini skaner qilolmasligini tuzatish
goravel/framework: v1.16.6
Ma’lumotlar bazasi kursori JSON ustunlarini skaner qilolmasligi muammosini qatorlarni skaner qilish funksionalligini yaxshilash orqali tuzatish. Bu o‘zgartirish JSON ustunlarini to‘g‘ri qayta ishlashni qo‘llab-quvvatlaydi va map[string]any, massivlar ([]string, []int) va maxsus strukturalarga avtomatik JSON-dan Go‘ga konvertatsiya qilish uchun yangi dekodlash ilmoqlarini qo‘shadi.
Muammo: #818
Distinct Count bilan ishlatilganda ta’sir ko‘rsatmasligini tuzatish
goravel/framework: v1.16.7
Distinct ni Count bilan birgalikda ishlatganda kutilgan alohida hisoblash natijalarini bermasligi muammosini tuzatish. Tuzatish yozuvlarni hisoblashda Distinct bandi to‘g‘ri qo‘llanilishini ta’minlaydi.
Muammo: #856
DB.Insert kutilganidek null ustunlar bilan ishlay olmasligi
goravel/framework: v1.16.7
facades.DB().Insert() kutilganidek null ustunlar bilan ishlay olmasligi muammosini tuzatish.
type Product struct {
Model
SoftDeletes
Name string `db:"name"`
Weight *int `db:"weight"` // Ko‘rsatkich
Height *int `db:"height"`
}
// Agar birinchi ma’lumotda Weight bo‘lmasa, Weight e‘tiborga olinmaydi
facades.DB().Table("products").Insert([]Product{
{Name: "count_product1"},
{Name: "count_product2", Weight: convert.Pointer(1)},
})
// Normal
facades.DB().Table("products").Insert([]Product{
{Name: "count_product2", Weight: convert.Pointer(1)},
{Name: "count_product1"},
})Muammo: #858
Noto‘g‘ri orm ichki bog‘lanishlarni yuklashni tuzatish
goravel/framework: v1.16.7
Orm Load() dan foydalanganda ichki bog‘lanishlarni qayta ishlay olmaydi.
facades.Orm().Query().Load(&model, "Author.Contacts")Navbat konkurensiyasi 1 dan katta bo‘lganda kechiktirilgan vazifa muammosini tuzatish
goravel/framework: v1.16.8
goravel/redis: v1.4.1
Navbat ishchisi konkurensiyasi 1 dan katta bo‘lganda, kechiktirilgan vazifalar bir necha marta bajariladi. Buning sababi, bir nechta ishchilar bir xil kechiktirilgan vazifa mavjud bo‘lganda uni olishi mumkin. Endi bir vaqtda faqat bitta ishchi kechiktirilgan vazifani bajarishi uchun tarqatilgan qulf ishlatiladi.
