Leser: 15
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
CREATE TABLE IF NOT EXISTS `users` (
`id` smallint(6) NOT NULL auto_increment,
`name` varchar(32) NOT NULL,
`password` varchar(40) NOT NULL,
`password_forcechange` enum('Y','N') NOT NULL,
`last_ip` varchar(15) default NULL,
`last_login` timestamp NULL default NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;
CREATE TABLE IF NOT EXISTS `users_contact` (
`user_id` smallint(6) NOT NULL,
`email` varchar(128) default NULL,
`homepage` varchar(256) default NULL,
`phone` text,
`messenger` text,
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ALTER TABLE `users_contact`
ADD CONSTRAINT `users_contact_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
package User; use strict; use base qw(DB::Object); __PACKAGE__->meta->setup ( table => 'users', columns => [ id => { type => 'integer', not_null => 1 }, name => { type => 'varchar', length => 32, not_null => 1 }, password => { type => 'varchar', length => 40, not_null => 1 }, password_forcechange => { type => 'enum', check_in => [ 'Y', 'N' ], not_null => 1 }, last_ip => { type => 'varchar', length => 15 }, last_login => { type => 'timestamp' }, ], primary_key_columns => [ 'id' ], unique_key => [ 'name' ], foreign_keys => [ ], relationships => [ contact => { type => 'one to one', class => 'User::Contact', column_map => { id => 'user_id' }, }, ] ); 1; package User::Contact; use strict; use base qw(DB::Object); __PACKAGE__->meta->setup ( table => 'users_contact', columns => [ user_id => { type => 'integer', not_null => 1 }, email => { type => 'varchar', length => 128 }, homepage => { type => 'varchar', length => 256 }, phone => { type => 'text', length => 65535 }, messenger => { type => 'text', length => 65535 }, ], primary_key_columns => [ 'user_id' ], relationships => [ user => { type => 'one to one', class => 'User', column_map => { 'user_id' => 'id' }, }, ], ); 1;
User->new(id=>1)->load->contact->email;
Can't locate object method "meta" via package "User::Contact" at /usr/share/perl5/Rose/DB/Object/MakeMethods/Generic.pm line 19
2010-04-02T14:40:24 rooootwenn man ein Relationship aufbaut, muss man in der Klasse, die das Relationship definiert, die Ziel-Klasse einbinden.
2010-04-02T14:50:04 pqist ein datenbankbezogenes modul, passt daher IMHO hier rein.
2010-04-02T15:31:24 rooootEs war ja bei der Problemstellung nicht klar, ob es jetzt an der falschen Klassendefinition für die Datenbanktabellen lag (ganz klar ein DB Thema) oder ob ich einfach Mist gebaut habe -- was ich ja iwie getan habe ;)
2010-04-02T15:31:24 rooootJetzt im Nachhinein: wo würdest Du es selbst zuordnen (immer die Suche im Hinterkopf) ?
2010-04-02T15:42:30 rooootHaha was soll ich jetzt sagen? Datenbank natürlich :P
Wer Rose::DB::Object benutzt hat im Hinterkopf, dass er Datenbanken verwenden will. Wenn ich also nach Rose::DB::Object suchen würde, würde ich wohl in diesem Subforum anfangen ;)