Hi,

I have a many to many relationship over a joining table, eg.

towns -> town_people -> people

In some cases it is possible for there to be has_one relationships
between the two outer tables. It's a bit of a contrived example but lets
say a person can live in multiple towns but only one is her home town.
Another (probably better) example would be that every town has one mayor.

I currently have a home_town_id field in the people table, which makes
things difficult with the foreign key constraint when inserting new
people with new home towns. And if there is a mayor_id in the towns
table which links to people, it is impossible to insert any new data
without disabling the foreign key constraints first.

So, my idea is (please say if this is also not such a good solution) to
remove the home_town_id field from people and add an is_home_town
NULLable flag (with unique index) to town_people. And similarly an
is_mayor flag to the same table...this way all town/people related data
is in one table and I no longer need to worry about foreign key
constraints when inserting the outer tables.

And finally, the DBIC question....

Is there a way to set up a has_one (home_town/mayor) relationship
between the people and towns tables with the following constraint on the
joining table: is_home_id = 1

So that I can make calls like this:

$person->home_town;
$town->mayor;

Or prefetch the related data in searches like this:

$resultset('People')->search(
  { 'me.name' => 'Sue' },
  { prefetch => 'home_town' },
);


Many thanks,

Stuart

_______________________________________________
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/dbix-class@lists.scsys.co.uk

Reply via email to