From: Daniel Westermann-Clark Date: Mon, 1 May 2006 19:29:37 +0000 (+0000) Subject: Add example of multi-column foreign keys X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=5271499d8d17aae6c7c5f26fe06ba830a215ee45;p=dbsrgits%2FDBIx-Class-Historic.git Add example of multi-column foreign keys --- diff --git a/lib/DBIx/Class/Relationship/Base.pm b/lib/DBIx/Class/Relationship/Base.pm index ebbf92c..ccbc433 100644 --- a/lib/DBIx/Class/Relationship/Base.pm +++ b/lib/DBIx/Class/Relationship/Base.pm @@ -29,27 +29,42 @@ methods, for predefined ones, look in L. __PACKAGE__->add_relationship('relname', 'Foreign::Class', $cond, $attrs); -The condition needs to be an SQL::Abstract-style representation of the -join between the tables. When resolving the condition for use in a JOIN, -keys using the pseudo-table I are resolved to mean "the Table on the -other side of the relationship", and values using the pseudo-table I +The condition needs to be an L-style representation of the +join between the tables. When resolving the condition for use in a C, +keys using the pseudo-table C are resolved to mean "the Table on the +other side of the relationship", and values using the pseudo-table C are resolved to mean "the Table this class is representing". Other restrictions, such as by value, sub-select and other tables, may also be -used. Please check your database for JOIN parameter support. +used. Please check your database for C parameter support. -For example, if you're creating a rel from Author to Book, where the Book -table has a column author_id containing the ID of the Author row: +For example, if you're creating a relationship from C to C, where +the C table has a column C containing the ID of the C +row: { 'foreign.author_id' => 'self.id' } -will result in the JOIN clause +will result in the C clause - author me JOIN book book ON bar.author_id = me.id + author me JOIN book book ON book.author_id = me.id -You can specify as many foreign => self mappings as necessary. Each key/value -pair provided in a hashref will be used as ANDed conditions, to add an ORed -condition, use an arrayref of hashrefs. See the L documentation -for more details. +For multi-column foreign keys, you will need to specify a C-to-C +mapping for each column in the key. For example, if you're creating a +relationship from C to C, where the C table refers to a +publisher and a type (e.g. "paperback"): + + { + 'foreign.publisher_id' => 'self.publisher_id' + 'foreign.type_id' => 'self.type_id', + } + +This will result in the C clause: + + book me JOIN edition edition ON edition.publisher_id = me.publisher_id + AND edition.type_id = me.type_id + +Each key-value pair provided in a hashref will be used as Ced conditions. +To add an Ced condition, use an arrayref of hashrefs. See the +L documentation for more details. Valid attributes are as follows: