Thread CRUD mit DBIx::Class etc. - erweiterbar?? (3 answers)
Opened by Peter Priess at 2011-09-13 12:21

jan
 2011-09-14 17:38
#152402 #152402
User since
2003-08-04
2536 Artikel
ModeratorIn
[Homepage] [default_avatar]
Das ist die richtige Methode, wenn Du das nur beim INSERT aber nicht bei UPDATE ausführen lassen willst. Oder Naja, es gibt da wohl viele Möglichkeiten, aber insert finde ich sinnvoll, man könnte aber wohl auch weiter unten in der Storage Engine eingreifen.

Und Du hast vollkommen recht: das Beispiel aus der Doku klappt so nicht. Das liegt aber daran, wie die Daten eingefügt werden, nämlich mit $schema->populate();

Quote
In void context, insert_bulk in DBIx::Class::Storage::DBI is used to insert the data, as this is a fast method. However, insert_bulk currently assumes that your datasets all contain the same type of values, using scalar references in a column in one row, and not in another will probably not work.

Otherwise, each set of data is inserted into the database using "create" in DBIx::Class::ResultSet, and a arrayref of the resulting row objects is returned.


d.h. es wird überhaupt nicht mit der Klasse gearbeitet beim Anlegen, weil der Call ja
Code: (dl )
1
2
3
4
$schema->populate('Artist', [
[qw/name/],
@artists,
]);


ist.

Wenn Du
Code: (dl )
1
2
3
4
  my $test = $schema->populate('Artist', [
[qw/name/],
@artists,
]);


daraus machst, klappt das genau wie man es erwartet.
Oder eben, ganz manuell (finde ich immer schöner, weil klarer ist, was passiert):
Code: (dl )
my $newartist = $schema->resultset('Artist')->create({});

View full thread CRUD mit DBIx::Class etc. - erweiterbar??