Model
Bun Spark Model is a simple, yet powerful ORM (Object-Relational Mapper) that allows you to interact with your database tables in an object-oriented way. It is built on top of the query builder and provides a simple and elegant way to perform CRUD operations.
Defining a Model
To define a model, you need to create a class that extends the Model
class and use the @column
decorator to define the table columns.
import { Model, column } from 'bun-spark'
class User extends Model {
@column({ primary: true })
public id: number
@column()
public name: string
@column()
public email: string
}
By default, Bun Spark will use the pluralized version of the class name as the table name. In this case, the table name will be users
. You can customize the table name by adding a static tableName
property to the model.
Column decorator
The @column
decorator is used to define the table columns. It accepts an options object with the following properties:
primary
: A boolean that indicates if the column is a primary key.name
: The name of the column in the database. By default, it is the same as the property name.serializeAs
: The name of the property in the serialized object. By default, it is the same as the property name.serialize
: A function that allows you to transform the value of the column when serializing the model.
class User extends Model {
@column({ primary: true })
public id: number
@column({
name: 'full_name',
serializeAs: 'full_name',
serialize: (value: string) => `My name is ${value}`,
})
public name: string
@column()
public email: string
}
Creating a new record
You can create a new record in the database using the create
static method.
The create
method will return a new instance of the model with the id
property set.
You can also use the insert
method to insert multiple records at once.
const users = await User.insert([
{ name: 'John Doe', email: 'john.doe@example.com' },
{ name: 'Jane Doe', email: 'jane.doe@example.com' },
])
Finding records
You can find a record by its primary key using the find
static method.
You can find all records in the table using the all
static method.
Querying records
You can use the query
static method to create a new query builder instance for the model.
Updating records
You can update a record by changing its properties and calling the save
method.
Deleting records
You can delete a record by calling the delete
method.
You can also delete records using the query builder.
Serializing a model
You can serialize a model to a plain JavaScript object using the serialize
method.
Transactions
You can use transactions with models by calling the useTransaction
static method.