Yancy::Guides::Model - Building modules for your application's business logic


version 1.074


This guide describes how to extend Yancy::Model to add custom business logic.

Model Classes

There are three types of classes in Yancy::Model:


The model class represents the entire database and contains schemas.


Schema classes represent individual tables, views, or collections and contain items.


Item classes represent individual records from the database.

Create a Model

To create your model, extend the Yancy::Model class.

    package MyApp::Model;
    use Mojo::Base 'Yancy::Model', -signatures;

Make sure to add your namespace to the "namespaces" in Yancy::Model array:

    unshift @{ $model->namespaces }, 'MyApp';

Your model class should include methods for the most common data lookups:

    sub get_user( $self, $id ) {
        return $self->schema( 'user' )->get( $id );

Your model class should also store configuration needed by the other classes:

    # Invitation e-mails come from this address
    has email_from => '';

Create a Schema

To create a schema class, extend Yancy::Model::Schema. The name of the schema class should be the camel-cased version of the schema's name.

    package MyApp::Schema::User;
    use Mojo::Base 'Yancy::Model::Schema', -signatures;

The schema class should contain methods that work on the collection: Creating new items, searching for items.

    # Invite a new user
    sub invite( $self, $email ) {
        my $id = $self->create({ email => $email });
        $self->get( $id )->send_invite_mail;
        return $id;

Create an Item

To create an item class, extend Yancy::Model::Item. The name of the item class should be the camel-cased version of the schema's name.

    package MyApp::Item::User;
    use Mojo::Base 'Yancy::Model::Item', -signatures;

The item class should contain methods that work on individual records.

    # Send the invite mail to this user
    sub send_invite_mail( $self ) {
        my $to = $self->data->{email};
        my $from = $self->model->email_from;
        # TODO: Send e-mail


Yancy::Guides, Yancy::Model


Doug Bell <>


This software is copyright (c) 2021 by Doug Bell.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.