-->
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".
Чтобы установить полное имя класса нужно его предварить знаком "+". Например, "+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 внутреннего выполнения потока управления.
Ваш пользовательский код выбрасывания исключения ДОЛЖЕН перебросить исключение, как "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