Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]9060[/thread]

DBIx::Class::InflateColumn

Leser: 1


<< >> 5 Einträge, 1 Seite
renee
 2007-06-03 15:24
#77198 #77198
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ich habe folgendes Programm:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/usr/bin/perl

use strict;
use warnings;
use MySchema;
use Data::Dumper;

my $schema  = MySchema->connect('DBI:SQLite:dbname=../../Testdb','','');
$schema->storage->debug(1);

my @userroles = $schema->resultset('UserRole')->search->all;
for my $userrole ( @userroles ){
    print $userrole->UserID->Username, " .. ", $userrole->RoleID->Role, "\n";
    if( $userrole->UserID->Username eq 'testperson' ){
        $userrole->set_column( 'RoleID', 1 );
        $userrole->update;
    }
}


Ich möchte bei der testperson die RollenID auf 1 setzen. Wenn ich dieses Skript ausführe, bekomme ich folgende Fehlermeldung:

Quote
SELECT me.UserID, me.RoleID FROM Gefa_User_Role me:
SELECT me.UserID, me.Username, me.Passwort, me.Active, me.Locked, me.SessionID FROM Gefa_User me WHERE ( ( ( me.UserID = ? ) ) ): '1'
SELECT me.RoleID, me.Role FROM Gefa_Role me WHERE ( ( ( me.RoleID = ? ) ) ): '2'

Oberkellner .. Rolle2
SELECT me.UserID, me.Username, me.Passwort, me.Active, me.Locked, me.SessionID FROM Gefa_User me WHERE ( ( ( me.UserID = ? ) ) ): '2'
SELECT me.RoleID, me.Role FROM Gefa_Role me WHERE ( ( ( me.RoleID = ? ) ) ): '2'

testperson .. Rolle2
UPDATE Gefa_User_Role SET RoleID = ? WHERE ( RoleID = ? AND UserID = ? ): '1', '1', '2'
DBIx::Class::InflateColumn::update(): Can't update MySchema::UserRole=HASH(0x1f46f70): row not found at test.pl line 33


Wie man sieht, wird bei der WHERE-Bedingung im UPDATE-Statement schon der neue Wert der RollenID genommen, was natürlich nicht klappen kann. Wie kann ich das umgehen?\n\n

<!--EDIT|renee|1180869930-->
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
pq
 2007-06-03 17:31
#77199 #77199
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
ich würde das dann so machen:
Code: (dl )
$userrole->update({ RoleID => 1 });

obwohl mir das wie ein bug vorkommt, dass es anders nicht geht.\n\n

<!--EDIT|pq|1180877510-->
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
renee
 2007-06-03 17:32
#77200 #77200
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Hat bei mir den gleichen Fehler gebracht!
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
pq
 2007-06-03 17:38
#77201 #77201
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
wie im irc vorgeschlagen: da es eine relations-tabelle ist, empfiehlt sich,
die zeile zu löschen und eine neue anzulegen, da RoleID ja zum primary key
gehört.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
renee
 2007-06-03 17:48
#77202 #77202
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
So werde ich es wohl machen (müssen). Danke!
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
<< >> 5 Einträge, 1 Seite



View all threads created 2007-06-03 15:24.