2010-12-03 1 views
3

У меня есть объект DBIx::Class, представляющий аукцион eBay. В базовой таблице есть столбец описания, который содержит много данных. Столбец описания почти никогда не используется, поэтому он не включен в список столбцов DBIx::Class для этой таблицы. Таким образом, большинство запросов не извлекают данные описания аукциона.Динамическое добавление столбцов в DBIx :: Class ResultSet

У меня есть, однако, один сценарий, которому нужна эта колонка. В этом одном случае, я хочу, чтобы получить доступ к содержимому колонки описания, как я, как и любому другому столбец:

$auction->description 

Как я могу сделать это, не заставляя все другие запросы для выборки столбца описания?

ответ

3

В старых версиях DBIx::Class (не уверен номер версии), следующий используются для работы:

my $rs = $schema->resultset('Auctions'); 
my $lots = $rs->search(
    undef, 
    { '+select' => 'description', '+as' => 'description' }, 
); 

Это не похоже на работу для обновления строк в современных версиях DBIx::Class. Попытка, что с обновлением

$auction->update({ description => '...'}) 

под DBIx::Class 0,08123 дает следующее сообщение об ошибке: "DBIx :: класс :: Отношения :: CascadeActions :: обновление(): Нет описания столбца в ..."

Предполагая, что скрипт, нуждающийся в дополнительном столбце, работает в своем собственном процессе. Вы можете сделать что-то вроде этого:

my $rs = $schema->resultset('Auctions'); 
$rs->result_source->add_columns('description'); 
YourApp::Schema::Lots->add_columns('description'); 
YourApp::Schema::Lots->register_column('description'); 

Конечно, это глобальное изменение. После добавления столбца другой код в том же процессе начнет извлекать столбец description в запросах. Не говоря уже, это отвратительно.

 Смежные вопросы

  • Нет связанных вопросов^_^