Как запретить DBIx :: Class :: Schema :: Loader автоматически добавлять InflateColumn :: DateTime в Catalyst? - PullRequest
6 голосов
/ 31 января 2011

Я использую Catalyst и DBIx :: Class :: Schema :: Loader для создания моей модели в Catalyst следующим образом:

script/myapp_create.pl model DB DBIC::Schema MyApp::Schema create=static overwrite_modifications=1 components=EncodedColumn dbi:mysql:mydb mydb pass

К сожалению,Загрузчик автоматически устанавливает InflateColumn::DateTime в качестве компонента по умолчанию, который мне не нужен.Я хочу получить необработанное значение из базы данных.

__PACKAGE__->load_components("InflateColumn::DateTime", "EncodedColumn");

Может кто-нибудь сказать мне, как это предотвратить?

Ответы [ 2 ]

6 голосов
/ 01 февраля 2011

Человек, это раздражает. Похоже, невозможно получить то, что вы хотите, как есть.

_build_loader_components в Catalyst :: Helper :: Model :: DBIC :: Schema добавляет его, если у вас нет пространств имен и пространства имен набора результатов. Это выдвигает ваш дополнительный component= список на это.

my @components = $self->old_schema && (not $use_namespaces) ? ()
    : ('InflateColumn::DateTime');                                 

Итак, варианты -

  1. Подать ошибку .
  2. Сделайте это с dbicdump .

Это должно быть то, что вы хотели -

dbicdump -o dump_directory=./lib \
    -o components='["EncodedColumn"]' \
    -o use_namespaces=1 \
    -o overwrite_modifications=1 \
    MyApp::Schema dbi:mysql:foo user pass

А потом просто простая модель, чтобы обернуть его -

script/myapp_create.pl model DB DBIC::Schema MyApp::Schema

Обновление: взято preserve_case, так как ваш пример не использовал его, и я хотел бы упомянуть в целях передовой практики, что пароль не должен быть в модели или классах схемы. Он должен быть в конфигурации, и если вы используете что-то, что позволяет это, например mysql, он должен быть настроен на чтение из файла конфигурации конкретной БД с ограниченными правами.

0 голосов
/ 17 декабря 2018

я делаю так и все заработало:

script/myapp_create.pl model DB DBIC::Schema MyApp::Schema \
    create=static components=TimeStamp dbi:SQLite:myapp.db \
    on_connect_do="PRAGMA foreign_keys = ON" \
    overwrite_modifications=1
...