Traigo los registros de una base de datos, y quiero en una sola línea crearle un campo a cada registro con los datos del creador del registro de otra tabla, eso por medio de un ORM:
Using perl Syntax Highlighting
$_->{'created_by'} = 1 # para todos los registros que traigo
$_->{'edited_by'} = 3 # para todos los registros
$_->{'edited_by'} = 3 # para todos los registros
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
mi línea map es así:
Using perl Syntax Highlighting
map( %{$_}->{'creador'} = $usuario->retrieve( $_->{'created_by'} ) , @$contents);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
también hice esto para ver:
Using perl Syntax Highlighting
map( %{$_}->{'creador_'.$_->{'created_by'}} = $usuario->retrieve( $_->{'created_by'} ) , @$contents);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
y efectivamente se crea la variable {'creador_1'}.
Pero $usuario->retrieve( $_->{'created_by'} ) es donde está el problema: siempre me toma el valor 3, y digamos en mi ejemplo el creador es el 1, pero no me trae los datos del 1, si no los datos de quien lo está editando cuyo id es 3.
Un dumper me muestra algo como esto:
Using perl Syntax Highlighting
- 'creador_1' => bless(
- { 'primary_key' => 'user_id',
- 'fields' => [ 'user_id', 'username', 'password', 'email', 'creation_date', 'group_id', 'status' ],
- 'db_type' => 'CSV',
- 'belongs_to' => {},
- 'table' => 'user',
- 'dbh' => bless( {}, 'DBI::db' ),
- 'data' => {
- 'password' => '1111',
- 'group_id' => '2',
- 'creation_date' => '2012-6-14',
- 'status' => undef,
- 'user_id' => '3',
- 'username' => 'talabary'
- },
- 'has_many' => { 'group' => { 'MyApp::Db::Group' => 'group_id' } }
- },
- 'MyApp::Db::User'
- ),
- 'date_creation' => '2012-7-9',
- 'target' => '',
- 'edited_by' => '3',
- 'template' => 'template.html',
- 'lastest_edit' => '2012-7-9',
- 'show_in_menu' => '',
- 'image' => '',
- 'tags' => '',
- 'title' => 'Terminos y Condiciones',
- 'decription' => '',
- 'created_by' => '1'
- };
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
pero lo que yo espero es:
Using perl Syntax Highlighting
- 'creador_1' => bless(
- { 'primary_key' => 'user_id',
- 'fields' => [ 'user_id', 'username', 'password', 'email', 'creation_date', 'group_id', 'status' ],
- 'db_type' => 'CSV',
- 'belongs_to' => {},
- 'table' => 'user',
- 'dbh' => bless( {}, 'DBI::db' ),
- 'data' => {
- 'password' => '2222',
- 'group_id' => '1',
- 'creation_date' => '2012-6-14',
- 'status' => undef,
- 'user_id' => '1',
- 'username' => 'danimera'
- },
- 'has_many' => { 'group' => { 'MyApp::Db::Group' => 'group_id' } }
- },
- 'MyApp::Db::User'
- ),
- 'date_creation' => '2012-7-9',
- 'target' => '',
- 'edited_by' => '3',
- 'template' => 'template.html',
- 'lastest_edit' => '2012-7-9',
- 'show_in_menu' => '',
- 'image' => '',
- 'tags' => '',
- 'title' => 'Terminos y Condiciones',
- 'decription' => '',
- 'created_by' => '1'
- };
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
No sé si el problema está en $usuario->retrieve( $_->{'created_by'} ), pero ese método funciona bien solo si la cargo así:
my $usuario = MyApp::Db::User->new($dbh);
y el método retrieve() devuelve la consulta de la tabla de usuarios con los datos.