Skip to content

Repository files navigation

Pinia ORM banner

npm versionnpm downloadsGithub Actions CICoverageLicense

Welcome to pinia-orm

The intuitive, type safe and flexible ORM for Pinia — normalize relational data in your stores and query it like with an ORM.

Features

  • Laravel-style query builder — where, whereLike, whereHas, orderBy (incl. Intl.Collator), groupBy, aggregates, updateOrCreate / firstOrCreate and more
  • All the relations: hasOne, hasMany, belongsTo, belongsToMany, hasManyThrough, morphOne, morphTo, morphMany, morphToMany, morphedByMany
  • Standard ECMAScript decorators for type safe model definitions
  • Single Table Inheritance with nested discriminators, lifecycle hooks, mutators, casts, hidden fields and query caching
  • First class Nuxt module (Nuxt 3 & 4) and an axios plugin

Quick start

npm install pinia pinia-orm
import{createPinia}from'pinia'import{createORM}from'pinia-orm'constpinia=createPinia().use(createORM())
import{Model,useRepo}from'pinia-orm'import{Attr,HasMany,Str,Uid}from'pinia-orm/decorators'classTodoextendsModel{staticentity='todos'
@Uid()id!: string
@Str('')text!: string
@Attr(null)userId!: string|null}classUserextendsModel{staticentity='users'
@Uid()id!: string
@Str('')name!: string
@HasMany(()=>Todo,'userId')todos!: Todo[]}constuserRepo=useRepo(User)userRepo.save({id: '1',name: 'John',todos: [{text: 'Read the docs'}]})constusersWithTodos=userRepo.with('todos').get()

Read the documentation for the full guide, or check the comparison with vuex-orm and the migration guide if you're upgrading.

Requirements

pinia-ormpiniaNodeTypeScript
2.x>= 3>= 22.12>= 5.2
1.x2.x>= 14>= 4.x

Help me keep working on this project 💚


💻 Development

  • Clone this repository
  • Enable Corepack using corepack enable
  • Install dependencies using pnpm install
  • Build the packages once with pnpm build:stub && pnpm build:ci
  • Run tests using pnpm test (or cd packages/pinia-orm && pnpm test:ui for the interactive UI)

Credits

Related projects

License

Made with ❤️

Published under MIT License.

About

The Pinia plugin to enable Object-Relational Mapping access to the Pinia Store.

Topics

Resources

Code of conduct

Contributing

Stars

527 stars

Watchers

1 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages