[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