class Cql::Repository(T, Pk)
Reference
< Object
A repository for a specific table This class provides a high-level interface for interacting with a table It provides methods for querying, creating, updating, and deleting records It also provides methods for pagination and counting records
Example Creating a new repository
Constructors
def new(schema : Schema, table : Symbol)
(schema : Schema, table : Symbol)
Initialize the repository with a schema and table name
@param schema [Schema] The schema to use
@param table [Symbol] The name of the table
@return [Repository] The repository object
Example Creating a new repository
Instance Methods
def all
Fetch all records of type T
@return [Array(T)] The records
Example Fetching all records
def build(attrs : Hash(Symbol, DB::Any))
(attrs : Hash(Symbol, DB::Any))
Build a new object of type T with the given attributes
@param attrs [Hash(Symbol, DB::Any)] The attributes to use
@return [T] The new object
Example Building a new user object
def count
Count all records in the table
@return [Int64] The number of records
Example Counting all records
def create(attrs : Hash(Symbol, DB::Any))
(attrs : Hash(Symbol, DB::Any))
Create a new record with given attributes
@param attrs [Hash(Symbol, DB::Any)] The attributes to use
@return [PrimaryKey] The ID of the new record Example Creating a new record
def create
def delete(id : Pk)
(id : Pk)
Delete a record by ID
@param id [PrimaryKey] The ID of the record
Example Deleting a record by ID
def delete
def delete_all
Delete all records in the table
Example Deleting all records
def delete_by
Delete records matching specific fields
@param fields [Hash(Symbol, DB::Any)] The fields to match
Example Deleting records by email
def exists?
Check if records exist matching specific fields
@param fields [Hash(Symbol, DB::Any)] The fields to match
@return [Bool] True if records exist, false otherwise
Example Checking if a record exists by email
def find(id : Pk)
(id : Pk)
Find a record by ID, return nil if not found
@param id [PrimaryKey] The ID of the record
@return [T?] The record, or nil if not found
Example Fetching a record by ID
def find!(id : Pk)
(id : Pk)
Find a record by ID, raise an error if not found
@param id [PrimaryKey] The ID of the record
@return [T] The record
Example Fetching a record by ID
def find_all_by
Find all records matching specific fields
@param fields [Hash(Symbol, DB::Any)] The fields to match
@return [Array(T)] The records
Example Fetching all active users
def find_by
Find a record by specific fields
@param fields [Hash(Symbol, DB::Any)] The fields to match
@return [T?] The record, or nil if not found
Example Fetching a record by email
def first
Fetch the first record in the table
@return [T?] The first record, or nil if the table is empty
Example Fetching the first record
def insert
def last
Fetch the last record in the table
@return [T?] The last record, or nil if the table is empty
Example Fetching the last record
def page(page_number, per_page = 10)
(page_number, per_page = 10)
Paginate results based on page number and items per page
@param page_number [Int32] The page number to fetch
@param per_page [Int32] The number of items per page
@return [Array(T)] The records for the page
Example Paginating results
def per_page(per_page)
(per_page)
Limit the number of results per page
@param per_page [Int32] The number of items per page
@return [Array(T)] The records for the page
Example Limiting results per page
def query
def update(id : Pk, attrs : Hash(Symbol, DB::Any))
(id : Pk, attrs : Hash(Symbol, DB::Any))
Update a record by ID with given attributes
@param id [PrimaryKey] The ID of the record
@param attrs [Hash(Symbol, DB::Any)] The attributes to update
Example Updating a record by ID
def update(id : Pk, **fields)
(id : Pk, **fields)
Update a record by ID with given fields
@param id [PrimaryKey] The ID of the record
@param fields [Hash(Symbol, DB::Any)] The fields to update
Example Updating a record by ID
def update
def update_all(attrs : Hash(Symbol, DB::Any))
(attrs : Hash(Symbol, DB::Any))
Update all records with given attributes
@param attrs [Hash(Symbol, DB::Any)] The attributes to update
Example Updating all records
def update_by(where_attrs : Hash(Symbol, DB::Any), update_attrs : Hash(Symbol, DB::Any))
(where_attrs : Hash(Symbol, DB::Any), update_attrs : Hash(Symbol, DB::Any))
Update records matching where attributes with update attributes
@param where_attrs [Hash(Symbol, DB::Any)] The attributes to match
@param update_attrs [Hash(Symbol, DB::Any)] The attributes to update
Example Updating records by email