Я использую DBIx :: Class для моей базы данных MySQL. У меня есть много похожих классов результатов, созданных путем подкласса из родительской схемы с использованием Helper :: Row :: SubClass. Можно ли включить более одного класса результатов в один и тот же файл .pm? Если да, пожалуйста, предложите, как это сделать.Класс DBIX - Несколько классов результатов в одном файле
ответ
Всегда можно поместить несколько пакетов в один и тот же файл.
package MyApp::Schema::Result::Foo;
# Stuff
package MyApp::Schema::Result::Bar;
# Other Stuff
1;
Это редко бывает хорошей идеей.
Я знаю, что это возможно в соответствии с Perl, но я не очень хорошо знаю DBIx :: Class внутри, а классы результатов не загружаются, если имя класса не совпадает с именем файла. Ошибка: «DBIx :: Class :: Schema :: source(): Не удается найти источник для
Если у вас есть класс результата в файле, который не соответствует имени класса или файлу с несколькими классами результатов, вам необходимо зарегистрировать классы результатов вручную, используя register_class. Так что в вашем классе схемы, добавьте:
__PACKAGE__->register_class(Foo => 'MyApp::Schema::Result::Foo');
__PACKAGE__->register_class(Bar => 'MyApp::Schema::Result::Bar');
Также убедитесь, что файл, содержащий несколько классов Resultset находится за пределами любого каталога, найденного load_namespcaes
или load_classes
и use
файл вручную.
Зачем вам требуется несколько классов в одном файле? –
Для 15-20 базовых классов мне нужно создать около 30 подклассов каждого класса. Каждый подкласс класса отличается только двумя символами, где я должен предоставить идентификатор клиента функции подкласса. – bvnbhati
Итак, у каждого клиента есть своя таблица в базе данных с идентификатором клиента как часть имени таблицы? Это похоже на то, что вы хотите создать, используя файл шаблона и цикл или два. –