Catalyst::Model::DBIC::Schema - DBIx::Class::Schema Model Class
Сначала нужно подготовить вашу базу данных с помощью DBIx::Class.
Catalyst.
Дополнительная информация по модулям: Catalyst::Helper::Model::DBIC::Schema - с помощью него, создается DBIx::Class::Schema из вашей БД, используя Helper скрипт и DBIx::Class::Schema::Loader::Base
script/myapp_create.pl model FilmDB DBIC::Schema MyApp::Schema::FilmDB \
create=static dbi:mysql:filmdb dbusername dbpass \
quote_names=1
Это пример подразумевает, что вы уже имеете БД FilmDB, который создаст Result classы для таблиц MyApp::Schema::FilmDB::Result::Actor
Хелпер так же создаст lib/MyApp/Model/FilmDB.pm файл.
Или можно создать так:
script/myapp_create.pl model FilmDB DBIC::Schema MyApp::Schema::FilmDB
dbi:mysql:filmdb dbusername dbpass
Информацию о подключении к БД "connect_info", можно опционально прописать в самом модуле, но лучше вынести ее отдельно в конфигурационный файл, который обладает большим приоритетом.
Теперь мы имеем работающую модель БД, к которой можно получить доступ с помощью обычного Catalyst метода: $c->model();
my $db_model = $c->model('FilmDB'); # модель Catalyst
my $dbic = $c->model('FilmDB')->schema; # DBIC объект
Можно и напрямую заполучить DBIx::Class::ResultSet вместо Catalyst::Model, так:
my $rs = $c->model('FilmDB::Actor');
В lib/MyApp/Schema/FilmDB/ResultSet/Actor.pm вы можете реализовать свои методы, дабы скрыть логику бд.
$c->model('Film::Actor')->SAG_members;
Модель - это не сама бд или таблица, а прослойка с методами к ним.
Три способа получить DBIC resulset объект.
my $rs = $c->model('FilmDB')->schema->resultset('Actor');
my $rs = $c->model('FilmDB')->resultset('Actor');
my $rs = $c->model('FilmDB::Actor');
Параметры конфига
schema_class
Имя класса вашей DBIx::Class::Schema схемы. Нужен, чтобы найти его в @INC. И не нужен в Catalyst::Model::namespace. Этот параметр необходим.
connect_info
Определяет storage_type. Не требуется если информация о подключение есть внутри schema_class (что крайне не желательно). Основные параметры для storage_type(DBIx::Class::Storage::DBI):
dsn, username, password и ссылка на хэш с оциями подключения.
<Model::FilmDB>
schema_class MyApp::Schema::FilmDB
traits Caching
<connect_info>
dsn dbi:Pg:dbname=mypgdb
user postgres
password ""
auto_savepoint 1
quote_names 1
on_connect_do some SQL statement
on_connect_do another SQL statement
</connect_info>
user_defined_schema_accessor foo
</Model::FilmDB>
traits
Traits - это Moose::Role. Массив traits применяется к экземпляру.
Traits - это Moose::Role. Массив traits применяется к экземпляру.
Они вначале относятся к MyApp::TraitFor::Model::DBIC::Schema::, затем к
Catalyst::TraitFor::Model::DBIC::Schema:: namespace, если "+"не указано полное имя класса.
traits Caching
traits +MyApp::TraitFor::Model::Foo
traits +MyApp::TraitFor::Model::Foo
Новый экземпляр созданный приложением при запуске, поэтому запрашивает необходимые аттрибуты, приведение типов данных и модификаторы, которые будут работать после.
Traits применяются к "COMPONENT" в Catalyst::Component всякий раз, используя CatalystX::Component::Traits
ref $self станет тотчас классом если будут применены какие нибудь traits,
$self->_original_class_name станет оригинальным классом.
Когда пишете Trait то интересные точки для модификации это: BUILD, "setup" и "ACCEPT_CONTEXT"
Доступные в дистрибутиве: Catalyst::TraitFor::Model::DBIC::Schema::Caching, Replicated, SchemaProxy, PerRequestSchema
$self->_original_class_name станет оригинальным классом.
Когда пишете Trait то интересные точки для модификации это: BUILD, "setup" и "ACCEPT_CONTEXT"
Доступные в дистрибутиве: Catalyst::TraitFor::Model::DBIC::Schema::Caching, Replicated, SchemaProxy, PerRequestSchema
storage_type
Позволяет использовать различные типы storage_type, которые установлены в вашей schema_class (если не установлен DBIx::Class, то обычно это ::DBI). Так как большинство поддерживает DBIx::Class, то использование этого аргумента не необходимо.
connect_info
Информация в виде хэша (с dsn/user/password)
model_name
Имя модели, если ваш класс называется MyApp::Model::DB то "model_name" будет DB.
_default_cursor_class
Аттрибуты
connect_info
Информация в виде хэша (с dsn/user/password)
model_name
Имя модели, если ваш класс называется MyApp::Model::DB то "model_name" будет DB.
_default_cursor_class
Чтобы сбросить ваш "cursor_class" по умолчанию. Этот класс DBIx::Storage::DBI::Cursor.
Аттрибуты из MooseX::Traits::Pluggable
Аттрибуты из MooseX::Traits::Pluggable
_original_class_name
Имя класса до того как "traits" будут применены. Например MyApp::Model::DB
_traits
Имя класса до того как "traits" будут применены. Например MyApp::Model::DB
_traits
Неразрешенный массив ссылок trait расположенные в конфиге.
_resolved_traits
Разрешенные traits которые вы используете к полным названиям класса.
_resolved_traits
Разрешенные traits которые вы используете к полным названиям класса.
Настройка вашей Schema и Resultsets
Методы
new
Экземпляры модели созданные на основе вышеупомянутых -config параметров. Необходимый параметр только schema_class, и connect_info если в schema_class нет этой информации.
schema
Возвращает schema к которой подключена эта модель. Есть прямые сслыки на schema->resultset, schema->source и schema->class
composed_schema
Аксессор, который возвращает составную схему, которая не имеет информации для подсоединения к ней, которая была используема в создании schema выше. Полезно, для создания нового соединения основанного на той же самой schema/model. Есть прямые ссылки из объекта модели для composed_schema->clone и composed_schema->connect
clone
Сокр для ->composed_schema->clone
connect
Сокр для ->composed_schema->connect
source
Сокр для ->schema->source
class
Сокр для ->schema->class
resultset
Сокр для ->schema->resultset
txn_do
Сокр для ->schema->txn_do
txn_scope_guard
Сокр для ->schema->txn_scope_guard
storage
Предоставляет доступ к подсоединенному объекту schema storage
setup
Вызывается во время сборки BUILD до конфигурации, но после установки "connect_info". Чтобы сделать что то после конфигурации используйте
after BUILD =>.
Получите хеш ссылок на аргументы для BUILD.
Окружение
CMDS_NO_SOURCES
Установите эту переменную. если вы будите использовать схемы без Resul classов чтобы выключить предупреждения, которые обычно выбрасываются, если нет Resul class.
Установка DBIC аутентификации, проверки подлинности
Для доп.информации смотрите Catalyst::Authentication::Store::DBIx::Class в MyApp.pm
package MyApp;
use Catalyst qw/... Authentication .../;
...
__PACKAGE__->config('Plugin::Authentication' =>
{
default_realm => 'members',
members => {
credential => {
class => 'Password',
password_field => 'password',
password_type => 'hashed'
password_hash_type => 'SHA-256'
},
store => {
class => 'DBIx::Class',
user_model => 'DB::User',
role_relation => 'roles',
role_field => 'rolename',
}
}
});