[Catalyst] CDBI Relationships

Zbigniew Lukasiak zzbbyy at gmail.com
Thu Aug 18 19:58:11 CEST 2005


You should add 
__PACKAGE__->columns( Stringify => qw/last_name/ ); 
to the BookDB::M::CDBI::Author package instead of BookDB::M::CDBI::Book.

By the way if you don't want to use the Loader you should use the
Catalyst::Model::CDBI::Plain or Catalyst::Model::CDBI::Sweet instead
of Catalyst::Model::CDBI.

-- Zbyszek

On 8/18/05, Eric Black <black.eric at gmail.com> wrote:
> Hi,
> 
> Still having problems figuring out how to set up relationships between
> tables. I see how the relationships are done in the Hops example, but
> I was hoping I wouldn't need the Class::DBI::Loader::Relationship
> class and could set up the relationship per table/class in my example
> app so I could understand how Catalyst is working a little better.
> 
> 
> I have a simple example Catalyst program I'm working with that has
> three database tables:
> 
> 
> mysql> describe author;
> +------------+--------------+------+-----+---------+----------------+
> | Field      | Type         | Null | Key | Default | Extra          |
> +------------+--------------+------+-----+---------+----------------+
> | author_id  | int(11)      |      | PRI | NULL    | auto_increment |
> | first_name | varchar(128) |      |     |         |                |
> | last_name  | varchar(128) |      |     |         |                |
> +------------+--------------+------+-----+---------+----------------+
> 
> mysql> describe book;
> +--------------+--------------+------+-----+---------+----------------+
> | Field        | Type         | Null | Key | Default | Extra          |
> +--------------+--------------+------+-----+---------+----------------+
> | book_id      | int(11)      |      | PRI | NULL    | auto_increment |
> | title        | varchar(255) |      |     |         |                |
> | isbn         | varchar(24)  |      |     |         |                |
> | publisher_id | int(11)      |      |     | 0       |                |
> | author_id    | int(11)      |      |     | 0       |                |
> +--------------+--------------+------+-----+---------+----------------+
> 
> mysql> describe publisher;
> +--------------+--------------+------+-----+---------+----------------+
> | Field        | Type         | Null | Key | Default | Extra          |
> +--------------+--------------+------+-----+---------+----------------+
> | publisher_id | int(11)      |      | PRI | NULL    | auto_increment |
> | name         | varchar(128) |      |     |         |                |
> +--------------+--------------+------+-----+---------+----------------+
> 
> 
> So, I created the models like so:
> 
> script/bookdb_create.pl model CDBI CDBI dbi:mysql:bookstore
> 
> And I got the one main CDBI.pm file and the empty class files for
> Author, Book, and Publisher that inherit. Now when I display the form
> for the Book table, I want to display the publisher name instead of
> the publisher_id and the author name(or at least last name) for
> author_id. I tried adding this to the BookDB::M::CDBI::Book package:
> 
> 
> __PACKAGE__->has_a( author_id    => 'BookDB::M::CDBI::Author' );
> __PACKAGE__->has_a( publisher_id => 'BookDB::M::CDBI::Publisher' );
> __PACKAGE__->columns( Stringify => qw/last_name/ );
> 
> This Stringify part is from the Class::DBI perldocs. I thought that
> the first line would automatically tie the author_id to the Author
> class, but I'm missing the part that will allow me to specify how to
> replace the book table's author_id with the author table's last_name.
> 
> Any help would be appreciated.
> 
> Thanks,
> 
> Eric
> 
> _______________________________________________
> Catalyst mailing list
> Catalyst at lists.rawmode.org
> http://lists.rawmode.org/mailman/listinfo/catalyst
>



More information about the Catalyst mailing list