2009年3月1日星期日

DBIx::Class list of one-liners

create table emp as select employee_id emp, email, department_id dept from employees;
create table dept as select department_id dept, department_name dname from departments; 

package HR::dept; use base qw{DBIx::Class};
__PACKAGE__->load_components(q(Core));
__PACKAGE__->table('dept');
__PACKAGE__->add_columns(qw{dept dname});
__PACKAGE__->set_primary_key('dept');

package HR::emp; use base q{DBIx::Class};
__PACKAGE__->load_components(q(Core));
__PACKAGE__->table('emp');
__PACKAGE__->add_columns(qw{emp dept email});
__PACKAGE__->set_primary_key('emp');
__PACKAGE__->belongs_to(dept => 'HR::dept');

package HR::dept; __PACKAGE__->has_many(emps => 'HR::emp');

package HR; use base qw{DBIx::Class::Schema}; __PACKAGE__->load_classes(qw{emp dept});

$schema=HR->connect('dbi:Oracle:','hr/hr');
print $_->dname, ' => ', @{[join ':', map {$_->email} $_->emps]}, qq(\n) for $schema->resultset('dept')->all;

没有评论: