[Moscow.pm] Вопрос по DBIx::Class
Ilya Chesnokov
chesnokov.ilya на gmail.com
Чт Апр 12 09:23:12 PDT 2012
12 апреля 2012 г. 16:56 пользователь Alexey Surikov <ksurent на gmail.com> написал:
> Есть класс Chapter, который представляет из себя главу книги. В классе,
> среди прочих, есть 3 поля с порядковыми номерами глав: текущая, предыдущая и
> следующая (ordinal, prev, next).
> Хочется при добавлении нового объекта в базу автоматически менять номер
> следующей главы для предыдущей (т.е. поставить туда номер только что
> созданного объекта).
>
> В коде это выглядит примерно вот так:
>
> Package Chapter;
>
> # ... DBIx::Class stuff
>
> use Class::Method::Modifiers;
>
> after insert => sub {
> my $self = shift;
>
> my $prev = $self->result_source_instance->resultset->search({
Похоже, что result_source_instance возвращает result source, не
соединённый с БД. Судя по мануалам, этот возвращаемый этим аксессором
объект предназначен в-основном для генерации resultset-классов на
лету.
В-общем, такой способ обращения к БД вроде бы работает:
my $prev = $self->result_source->resultset->search({ ... });
> book_id => $self->book_id,
> ordinal => $self->prev,
> })->single;
> if(defined $prev) {
> $prev->next($self->ordinal);
> $prev->update;
> }
> };
>
> При попытке это выполнить получаю:
> DBIx::Class::ResultSet::single(): Unable to perform storage-dependent
> operations with a detached result source (source '_unnamed_' is not
> associated with a schema)
>
> Сталкивался кто–нибудь с этим? Не очень понятно в какую сторону смотреть.
> Читал список рассылки dbix-class, там это сообщение упоминается один раз, но
> в другом контексте (что–то связанное с сериализацией объектов, чего у меня
> нет).
>
> ЗЫ: просто перегружать insert тоже пробовал, толку ноль.
>
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
>
--
Best regards,
Ilya Chesnokov
Подробная информация о списке рассылки Moscow-pm