in reply to how to create relation between the tables.

The only situation where I ever found Class::DBI::Loader::Relationship to work was in Simon Cozen's demonstration. In all other cases I found it to be far more work to find the magic English incantation to make C:DBI:L:R work than it was to simply manually specify the relationship to Class::DBI.

From the error message you posted, the error seems to happen somewhere in a package "TOPO", or close to it. We will need the Class::DBI setup Perl code, and it will also help us if you show us the database structure of the two tables you're trying to relate.

I recommend that you whittle down your code to a basic test file that has the same problems but as little code as possible, most likely something such as the following:

package TOPO; use base 'Class::DBI'; TOPO->connection(...); package TOPO::ventry; ... package TOPO::ventryabstract; ... package main; # define the relationship here

Replies are listed 'Best First'.
Re^2: how to create relation between the tables.
by revtopo (Initiate) on Jul 16, 2007 at 10:36 UTC
    #!/jic-atidb/perl/bin/perl package TOPO; use warnings; use Carp; use base 'Apache::MVC'; use Class::DBI::Loader::Relationship; use Data::Dumper; use Maypole::Constants; my $title = "TOPO database. Very rudimentary interface as a starting p +oint for development."; TOPO->setup("dbi:mysql:topo_interpro2","nobody","",{AutoCommit => 1, P +rintError => 1}); # creating connectionsto the DBI. TOPO->config->{uri_base} = "http://atidb.org/topo/"; TOPO->config->{rows_per_page} = 20; TOPO->config->{template_root} = "/jic-atidb/w3/topo/"; TOPO->config->{application_name} = $title; #TOPO->config->{display_tables} =[qw[VENTRY VENTRYABSTRACT]]; #TOPO->config->{loader}->relationship($_) for #("ventry has ventryabstract"); #1; sub debug { return 2; } 1;
    this is to create the tables: CREATE TABLE`topo_interpro2`.`VENTRYXREF` AS SELECT E.ENTRY_AC,E.NAME, X.DBCODE,X.AC,X.NAME AS XREFNAME FROM ENTRY E, ENTRY_XREF X WHERE E.ENTRY_AC = X.ENTRY_AC AND E.NAME LIKE '%topoisomerase%';

    CREATE TABLE`topo_interpro2`.`VENTRYDATABASE` AS SELECT E.ENTRY_AC, E.NAME, X.AC,C.DBCODE,C.DBNAME FROM ENTRY E, ENTRY_XREF X, CV_DATABASE C WHERE E.ENTRY_AC = X.ENTRY_AC AND X.DBCODE = C.DBCODE AND E.NAME LIKE '%topoisomerase%';