Schrift
[thread]3213[/thread]

Probs mit DBIx::Class::PK::AutoINSERT INTO books (: PK::Auto setzt anscheinend keine PK's

Leser: 1


<< >> 7 Einträge, 1 Seite
seebap
 2006-08-20 16:11
#30197 #30197
User since
2003-11-01
12 Artikel
BenutzerIn
[default_avatar]
Um in die Welt von Catalyst einzusteigen, arbeite ich mich durch das Tutorial auf CPAN. Nun bin ich grad beim Include a Create Action in the Books Controller. Ich hab das auch so wie beschrieben umgesetzt. Habe aber statt der SqLite DB eine MySql DB-Anbindung verwendet und dazu auch die Appendix B berücksichtigt. Das Anzeigen der Bücher über localhost/books/list funktioniert auch, nur nicht das Hinzufügen via localhost/books/create_url... . Dem Debug Screen von myapp_server.pl hab ich entnommen das DBIx::Class folgenden SQL-String an den MySql Server sendet:
Code: (dl )
INSERT INTO books (rating, title) VALUES (?, ?)' (`2', `Perl fÃ&¼r Dummies')
Natürlich beschwert sich jetzt MySql, dass dabei kein Primäry Key angegeben ist. Das müsste aber automatisch durch den Eintrag:
Code: (dl )
__PACKAGE__->load_components(qw/PK::Auto Core/);
, in dem DBIC Schema myapp::books, passieren. Habt ihr ne Ahnung, was da jetzt schief laufen könnte?
esskar
 2006-08-20 21:04
#30198 #30198
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
PK::Auto heißt, dass als PK ein Autoincrement Key erwartet wird, also macht DBIC alles richtig!
seebap
 2006-08-20 21:49
#30199 #30199
User since
2003-11-01
12 Artikel
BenutzerIn
[default_avatar]
Das verstehe ich jetzt nicht so ganz. Ich dachte dass ich mich bei dem folgenden Aufruf, gar nicht um den PK kümmern muss
Code: (dl )
1
2
3
4
my $book = $c->model('MyAppDB::Book')->create({
title => $title,
rating => $rating
});

, weil in der Schema Klasse ja folgendes steht:
Code: (dl )
1
2
3
use base qw/DBIx::Class/;
# Load required DBIC stuff
__PACKAGE__->load_components(qw/PK::Auto Core/);
esskar
 2006-08-21 00:03
#30200 #30200
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
zeig mir mal den CREATE befehl deiner MySQL tabelle
seebap
 2006-08-21 11:28
#30201 #30201
User since
2003-11-01
12 Artikel
BenutzerIn
[default_avatar]
Code: (dl )
1
2
3
4
5
CREATE TABLE books (
id INTEGER PRIMARY KEY,
title TEXT ,
rating INTEGER
);


Und hier nochmal die Fehlermeldung:
Code: (dl )
Caught exception in MyApp::Controller::Books->form_create_do "DBIx::Class::ResultSet::create(): Error executing 'INSERT INTO books (rating, title) VALUES (?, ?)' (`5', `Perl In A Nutshell'): Duplicate entry '0' for key 1

Ausserdem versucht Catalyst ein Template namens form_create_do zu rendern, das garnicht existiert:
Code: (dl )
Coldn't render template "file error - books/form_create_do: not found"

Ich benutze aber ein anderes Template, dass ich am Ende der Routine definiere:
Code: (dl )
$c->stash->{template} = 'books/create_done.tt2';

Ich glaub nicht dass die Fehlermeldung irgentwas zu bedeuten hat, da die Ausführung vor der obigen Definition abgebrochen wird. Aber komisch ist nur das die Fehlermeldung mit dem nicht gefundenen Template vor der DBIx::Class Fehlermeldung kommt.
pq
 2006-08-21 13:15
#30202 #30202
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=seebap,21.08.2006, 09:28]
Code: (dl )
1
2
3
4
5
CREATE TABLE books (
           id          INTEGER PRIMARY KEY,
           title       TEXT ,
           rating      INTEGER
   );

[/quote]
kein wunder, da fehlt ja auch noch das AUTO_INCREMENT,
wie esskar schon erwähnte.
http://mysql.com/doc/refman/5.0/en/example-auto-increment.html\n\n

<!--EDIT|pq|1156151767-->
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
seebap
 2006-08-21 13:45
#30203 #30203
User since
2003-11-01
12 Artikel
BenutzerIn
[default_avatar]
Danke! Ich hab das aber 1:1 vom Catalyst Tutorial übernommen.
<< >> 7 Einträge, 1 Seite



View all threads created 2006-08-20 16:11.