(I also asked this at http://perlmonks.org/?node_id=661319 )

Here is what I'm trying to do:

package ThreadedDB::Article; use strict; use warnings; use base 'DBIx::Class'; __PACKAGE__->load_components("Core"); __PACKAGE__->table("article"); __PACKAGE__->add_columns( "id", { data_type => "INT", default_value => undef, is_nullable => 0, size => 11 }, # etc, etc, etc ); __PACKAGE__->set_primary_key("id"); __PACKAGE__->has_many( "article_texts", "ThreadedDB::ArticleText", { "foreign.article" => "self.id" }, ); # Created by DBIx::Class::Schema::Loader v0.04004 @ 2008-01-03 18:12:12 # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:Y0WFrRSlgOqaz/fbhRt98A package ThreadedDB::Article::ResultSet; use base 'DBIx::Class::ResultSet'; sub insert_article { my ($self, $topic, $parent, $msgtext) = @_; my $articles = $self->resultset('Article'); eval { $self->txn_do (sub { # a complex operation that is not relevant yet }) }; }

In other words, I'd like to find a way to put a method into the Article.pm file in such a way that I could access it by doing $schema->resultset('Article')->insert_article(...)

I've tried directly declaring the class (as commented out, above) but it didn't work. Either I'm misunderstanding what the resulting class should be called, or I'm misunderstanding something else.

I did read Re^2: [DBIX::Class] problem with Arbitrary SQL through a custom ResultSource <http://perlmonks.org/?node_id=658193>, but it didn't help since the method I need contains a bunch of code (not all of which can be in SQL), and all of which should be done inside a transaction.

my $articles = $schema->resultset('ThreadedDB::Article');
 DB<3> x $articles->can('create')
0  CODE(0x88b1cd4)
  -> &DBIx::Class::ResultSet::create in 
/usr/share/perl5/DBIx/Class/ResultSet.pm:1625-1630

Looks like I'm looking at the right class...

 DB<4> x $articles->can('insert_article')
0  undef

But it doesn't know how to "insert_article".

I tried looking at the return from $schema->resultset to see if that would give 
me a clue as
to which class I should add methods to, but that gave me:

DB<5> x ref $schema->resultset('ThreadedDB::Article')
0  'DBIx::Class::ResultSet'

And I don't think I should be adding my methods to that.

I also tried doing it without the extra "package" declaration (in the hope that it would somehow automagically do the right thing, but that didn't work, either.

I'd be grateful for any pointers...


_______________________________________________
List: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/dbix-class
IRC: irc.perl.org#dbix-class
SVN: http://dev.catalyst.perl.org/repos/bast/DBIx-Class/
Searchable Archive: http://www.grokbase.com/group/[EMAIL PROTECTED]

Reply via email to