DBIx::Class::Schema


-->

DBIx::Class::Schema


Создает классы базы данных основанных на схеме. Это рекомендуемый путь использования DBIx::Class который позволяет вам использовать более одного соединения с вашими классами.

Методы установки


load_namespaces
Аргументы: %options?

__PACKAGE__->load_namespaces();

__PACKAGE__->load_namespaces(
  result_namespace => 'Res',
  resultset_namespace => 'RSet',
  default_resultset_class => '+MyDB::Othernamespace::RSet',
);

Без аргументов, метод использует модуль Module::Find чтобы загрузить все из Result и ResultSet классов под пространством имен схемы из которой он был вызван. Для примера, "My::Schema" по умолчанию найдет и загрузит Result классы по имени "My::Schema::Result::*" и ResultSet классы по имени "My::Schema::ResultSet::*".

ResultSet классы ассоциируются с Result классом с тем же именем. Для примера, "My::Schema::Result::CD" получит ResultSet класс "My::Schema::ResultSet::CD" в заданный момент.

Оба Result и ResultSet пространство имен настраивается через "result_namespace" и "resultset_namespace" обпции.

Другая опция "default_resultset_class" задает пользовательские настройки ResultSet класса по умолчанию для Result классов без соответствующего ResultSet.

Все опции из пространств имен и имен классов по умолчанию соотносятся с имене класса схемы.
Чтобы установить полное имя класса нужно его предварить знаком "+". Например, "+Other::NameSpace::Result".

Предупреждения
Вы будете предупреждены если обнаруженных ResultSet классов не имеется соответствующих Result классов.
Или если найденный Result класс уже имеет ResultSet класс, устанавливая использование "resultset_class" для других классов, вы будете предупреждены.

Примеры:
# load My::Schema::Result::CD, My::Schema::Result::Artist,
# My::Schema::ResultSet::CD, etc...
My::Schema->load_namespaces;

# Override everything to use ugly names.
# In this example, if there is a My::Schema::Res::Foo, but no matching
# My::Schema::RSets::Foo, then Foo will have its
# resultset_class set to My::Schema::RSetBase
My::Schema->load_namespaces(
  result_namespace => 'Res',
  resultset_namespace => 'RSets',
   default_resultset_class => 'RSetBase',
);

# Put things in other namespaces
My::Schema->load_namespaces(
   result_namespace => '+Some::Place::Results',
   resultset_namespace => '+Another::Place::RSets',
);

Чтобы найти множественные пространства имен для любого Result или ResultSet классов, используйте ссылку на массив пространства имен для этой опции. Пространство имен указанное позже, перепишет те, которые указаны ранее.

My::Schema->load_namespaces(
# My::Schema::Results_C::Foo takes precedence over My::Schema::Results_B::Foo :
  result_namespace => [ 'Results_A', 'Results_B', 'Results_C' ],
  resultset_namespace => [ '+Some::Place::RSets', 'RSets' ],
);


load_classes
Arguments: @classes?, { $namespace => [ @classes ] }+

Альтернативный метод "load_namespaces", оба из которых обслуживают похожие цели, каждый с разными преимуществами и недостатками. В общем случае вам следует использовать "load_namespace", если вам не нужна возможность объявить, что только определенные классы будут загружаться во время выполнения.

Без аргументов, этот метод использует Module::Find, чтобы найти все классы под пространством имен схемы. Иначе, этот метод загрузит классы, которые вы объявили (используя use) и зарегистрирует их (используя "register_class").

Можно закомментировать классы используя "#", но Perl будет думать что это ошибка (попытка использовать комментарии в qw списке), поэтому вам необходимо добавить "no warnings 'qw';" до вашего вызова load_classes.

My::Schema->load_classes(); # loads My::Schema::CD, My::Schema::Artist,
# etc. (anything under the My::Schema namespace)

# loads My::Schema::CD, My::Schema::Artist, Other::Namespace::Producer but
# not Other::Namespace::LinerNotes nor My::Schema::Track
My::Schema->load_classes(qw/ CD Artist #Track /, {
   Other::Namespace => [qw/ Producer #LinerNotes /],
});

storage_type
Аргументы: $storage_type|{$storage_type, \%args}
Возвращаемое значение: $storage_type|{$storage_type, \%args}
Значение по умолчанию: DBIx::Class::Storage::DBI

Устанавливает тип хранения, когда вызывается "connect". Если имя начинается с "::", то приставка "DBIx::Class::Storage" подставится при запуске "connect".

Если вы хотите использовать это, чтобы установить подкласс DBIx::Class::Storage::DBI в случае, где соответсвующий подкласс не был автоматически определен.

Если ваши тип хранения требует инициализирующих аргументов, те, которые объявляются вторым аргументов в виде сслыки на хеш и целое значение нужно, чтобы обернуть в виде ссылки на массив или хеш.

exception_action
Arguments: $code_reference
Return value: $code_reference
Default value: None

Когда "throw_exception" случается и "exception_action" устанавливается в ссылку на код, эта ссылка будет вызвана вместо "throw" в DBIx::Class::Exception с сообщением об исключении в качестве единственного аргумента.
Ваш пользовательский код выбрасывания исключения ДОЛЖЕН перебросить исключение, как "throw_exception" встроенная часть DBIC внутреннего выполнения потока управления.

package My::Schema;
use base qw/DBIx::Class::Schema/;
use My::ExceptionClass;
__PACKAGE__->exception_action(sub { My::ExceptionClass->throw(@_) });
__PACKAGE__->load_classes;

# or:
my $schema_obj = My::Schema->connect( .... );
$schema_obj->exception_action(sub { My::ExceptionClass->throw(@_) });

stacktrace
Arguments: boolean

Следует ли включать "throw_exception" в трейс стека. Обычно по умолчанию нет, но по умолчанию да, если $ENV{DBIC_TRACE} установлен.

sqlt_deploy_hook
Arguments: $sqlt_schema

Дополнительный пункт, который вы можете объявить в вашем собственном классе Схемы, который будет передан SQL::Translator::Schema объекту когда вы развернете схему через "create_ddl_dir" или "deploy".


Методы


connect
Arguments: @connectinfo
Return Value: $new_schema

Создает и возвращает новый объект Схема. Смотри "connect_info" в DBIx::Class::Storage::DBI.

connect равен $schema->clone->connection(@connectinfo).


resultset
Arguments: $source_name
Return Value: $resultset

my $rs = $schema->resultset('DVD');

Возвращает объект DBIx::Class::ResultSet.


sources
Return Value: @source_names

my @source_names = $schema->sources;
Возвращает объект DBIx::Class::ResultSource class
Arguments: $source_name
Return Value: $classname

my $class = $schema->class('CD');
Ищет имя Result класса для данного источника.

txn_do
Arguments: $coderef, @coderef_args?
Return Value: The return value of $coderef

Выполняет $coderef c (дополнительными) аргументами @coderef_args, возвращающих свой результат (или иной). Равнозначен вызовову $schema->storage->txn_do

Внимание: если вы соединены с "AutoCommit => 0" транзакцию рассмотрят вложенную и вам все еще необходимо вызвать "txn_commit" для того, чтобы записать ваши изменения в нужное время. Вы также захотите подсоединиться с "auto_savepoint => 1" чтобы получить частичный откат для работы, если драйвер бд поддерживает эту опцию.

Рекомендуется подключаться с "AutoCommit => 1"

txn_scope_guard
Выполняет "txn_scope_guard" на хранилище схемы.

txn_begin
Начинает транзакцию (не делает ничего если AutoCommit в 0). Так же как и $schema->storage->txn_begin

txn_commit
Фиксирует текущую транзакцию. ($schema->storage->txn_commit)

txn_rollback
Откатывает текущую транзакцию. ($schema->storage->txn_rollback)

storage
my $storage = $schema->storage;

Возвращает DBIx::Class::Storage объект для этой Схемы. Схватывает это если вы хотите включить SQL предложение отладку во время выполнения или установить символ цитаты.

populate
Arguments: $source_name, \@data;
Return value: \@$objects | nothing

Передают методу имя источника и массив массивов. Массив массивов должен содержать список имен столбцов, с одним или множественным набором нужных данных для данного столбца.

В пустом контексте, "insert_bulk" в DBIx::Class::Storage::DBI использовался для вставки данных, как этот быстрый метод. Тем не менее insert_bulk теперь принимает, что ваш набор данных все содержит тот же тип значений, используемых скалярными ссылками в столбце одной строки и не работает в другом случае.

Иначе, каждый набор данных будет вставлен в базу данных используя "create" в DBIx::Class::ResultSet и вернется массив строк в результате.

Например:
$schema->populate('Artist', [
[ qw/artistid name/ ],
[ 1, 'Popular Band' ],
[ 2, 'Indie Band' ],
...
]);


connection
Arguments: @args
Return Value: $new_schema

Подобно "connect" но устанавливает объект хранилища и соединение к данным расположенным в Schema классе.

compose_namespace
Arguments: $target_namespace, $additional_base_class?
Retur Value: $new_schema

Для каждого DBIx::Class::ResultSource в схеме, этот метод создает класс в целевом пространстве имен (например, $target_namespace::CD,
$target_namespace::Artist) которые наследуются из соответствующих классов, прикрепленных к текущей схеме.

Это также прикрепляет соответсвующий DBIx::Class::ResultSource объект к новому объекту $schema. Если $additional_base_class задан, новые составные классы будут наследоваться из 1го подходящего класса из текущей схемы затем из основного класса.

Например, для схемы с My::Schema::CD и My::Schema::Artist классами.

$schema->compose_namespace('My::DB', 'Base::Class');
print join (', ', @My::DB::CD::ISA) . "\n";
print join (', ', @My::DB::Artist::ISA) ."\n";

в результате выведет

My::Schema::CD, Base::Class
My::Schema::Artist, Base::Class

svp_begin
Создает новую точку сохранения (ничего не делает, снаружи транзакции). Равнозначен вызову $schema->storage->svp_begin.

svp_release
Освобождает точку сохранения (ничего не делает, снаружи транзакции). То же, что $schema->storage->svp_release.

svp_rollback
Возвращается к точке сохранения (ничего не делает, снаружи транзакции). То же, что $schema->storage->svp_rollback.

clone
Arguments: %attrs?
Return Value: $new_schema
Клонирует схему и связанные с ней result_source объекты и возвращает копию. Копия будет иметь те же аттрибуты, кроме тех, что были переписаны аргументом %attrs.

throw_exception
Arguments: $message
Выбрасывает исключение. Подчиняется правилам DBIx::Class::Carp об информировании об ошибках из пользовательской стороны. Если "stacktrace" включен, "throw_exception" поведение по умолчанию, будет предоставлено детальным стек трейсом.

deploy
Arguments: \%sqlt_args, $dir
Пытается развернуть схему в текущем хранилище используя SQL::Translator.
См. "МЕТОДЫ" в SQL::Translator для списка значений для "\%sqlt_args". По большинству общим значение для этого предпологается "{ add_drop_table => 1 }" чтобы иметь предоставленный SQL включенное "DROP_TABLE" предложение для каждой созданной таблицы. "quote_table_names" и "quote_field_names" применяются для цитирования целей.

deployment_statements
Arguments: См "deployment_statements" в DBIx::Class::Storage::DBI
Return value: $listofstatements
То же, что "$self->storage->deployment_statements($self, @args)". Возращает SQL состояние применяемые "deploy" и "deploy" в DBIx::Class::Schema::Storage.

create_ddl_dir
Arguments: See "create_ddl_dir" in DBIx::Class::Storage::DBI
Тоже что "$self->storage->create_ddl_dir($self, @args)".
Создает SQL файл, основанный на схеме, для каждого объявленного типа базы данных, в заданной директории.

ddl_filename
Arguments: $database-type, $version, $directory, $preversion
Return value: $normalised_filename
my $filename = $table->ddl_filename($type, $version, $dir, $preversion)

Этот метод вызывается "create_ddl_dir" чтобы формировать имя файла заданной папки, типа базы данных и номера версии. По умолчанию формат имени файла: "$dir$schema-$version-$type.sql".

thaw
Предоставляет рекомендованный путь оттаивания объектов схемы. Вы можете вызвать "Storable::thaw" напрямую, если пожелаете, но оттаянные объекты не будут иметь ссылку на любую схему.

freeze
Не делает ничего более, чем вызов "nfreeze" в Storable.

dclone
Arguments: $object
Return Value: dcloned $object
Рекомендованный путь клонирования DBIx::Class::Row и DBIx::Class::ResultSet объектов, таким образом их ссылки к объекту схемы (которые сами не были клонированы) правильно обслуживаются.

schema_version
Возвращает $VERSION в классе текующей схемы.

register_class
Arguments: $moniker, $component_class
Этот метод вызывается "load_namespaces" и мтодом "load_classes" чтобы установить найденные классы в вашей Схеме. Вам следует использовать их, вместо register_class.

register_source
Arguments: $moniker, $result_source
Этот метод вызывается "register_class". Регистры DBIx::Class::ResultSource в схеме с заданным прозвищем.

unregister_source
Arguments: $moniker
Удаляет DBIx::Class::ResultSource из схемы для данного прозвища.

register_extra_source
Arguments: $moniker, $result_source
Как "register_source" но его следует использовать, если результирующий класс уже имеет источник и вы хотите зарегистрировать еще один.

compose_connection (ЗАПРЕЩЕННЫЙ)
Arguments: $target_namespace, @db_info
Return Value: $new_schema