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();
QuoteIn 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
$schema->populate('Artist', [
[qw/name/],
@artists,
]);
ist.
Wenn Du
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):
my $newartist = $schema->resultset('Artist')->create({});