[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