On 3/27/07, Robert James Kaes <[EMAIL PROTECTED]> wrote:
> CREATE TABLE locations (
> id INT,
> ...);
>
> CREATE TABLE companies (
> id INT,
> location_id INT NOT NULL REFERENCES locations(id),
> ...);
>
> CREATE TABLE exhibitions (
> id INT,
> location_id INT NOT NULL REFERENCES locations(id),
> ...);
> [...] What I'd like to create is a "company" relationship in Exhibition that
> returns the Company that has the same location_id as itself.
Given the schema above, there could be many such companies, not just
one. So it'd be a one-to-many relationship:
package Exhibition;
...
__PACKAGE__->meta->setup(
...
relationships =>
[
companies =>
{
type => 'one to many',
class => 'Company',
column_map => { location_id => location_id },
},
...
You'll get a list or reference to an array of related companies
through this method:
$e = Exhibition->new(id => ...)->load;
$companies = $e->companies;
if(@$companies) { ... }
If there really can only be one such company with the same location
id, then you'll have to make location_id a unique key of the companies
table and/or Company class:
package Company;
...
__PACKAGE__->meta->setup(
...
unique_key => 'location_id',
...
then set up a many-to-one relationship like this:
package Exhibition;
...
__PACKAGE__->meta->setup(
...
relationships =>
[
company =>
{
type => 'many to one',
class => 'Company',
column_map => { location_id => location_id },
required => 0,
},
...
The "required" attribute makes the method return undef (instead of
throwing an exception) when no matching company exists:
http://search.cpan.org/dist/Rose-DB-Object/lib/Rose/DB/Object/Metadata/Relationship/ManyToOne.pm#required
$company = $e->company; # may be undef
-John
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Rose-db-object mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/rose-db-object