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
| [reply] [d/l] |
#!/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%';
| [reply] [d/l] |