[Dbix-class] Relationship condition problem.
Anthony Hinsinger
anthony.hinsinger at univ-pau.fr
Thu Nov 23 14:10:42 GMT 2006
Hello,
i've a problem to define a relationship between two tables where the
join condition need an operator different than '='.
The idea of the db design is (i'm using postgresql) :
TABLE networks => VARCHAR name, CIDR net
TABLE ips => INET addr, VARCHAR hostname
* CIDR is a type to define a network (for exemple 192.168.1.0/24)
* INET is a type to define an IP address (for exemple 192.168.1.37)
* with pgsql, you can use the '<<=' operator to know if an INET is
inside of a CIDR.
i'd like to select all ips, and for each, the associated network name.
With SQL i can (successfully) use this request :
"SELECT ips.addr, networks.name FROM ips INNER JOIN networks ON ips.addr
<<= networks.net;"
as you can see, the join condition is "ips.addr <<= networks.net"
In the documentation (DBIx::Class::Relationship::Base) i saw that :
"The condition needs to be an SQL::Abstract
<http://search.cpan.org/perldoc?SQL%3A%3AAbstract>-style representation
of the join between the tables"
so, into my schema module i tried this :
__PACKAGE__->add_relationship("network", "Networks", { 'foreign.net' =>
{ '<<=', 'self.addr'} } );
to force an operator other than 'equal', but it don't work, because the
condition key/value is check (into ResultSource.pm, function
resolve_condition) and it doesn't like an hash ref as the value (because
it check directly if the scalar contains foreign or self keywords).
Any idea how i can describe this "simple" join condition with DBIx::Class ??
The only thing missing (i think) is to force the condition operator ...
Thank you for helps
Anthony Hinsinger.
Universite de Pau - France
More information about the Dbix-class
mailing list