=head2 Simple insertion, populating rows
-The B<populate> method is for inserting chunks of data to pre-populate / initialise a database with a set of known values. In void context it uses DBI's fast "insert_bulk" method.
+The B<populate> method is for inserting chunks of data to pre-populate / initialise a database with a set of known values. In void context it uses DBI's fast "execute_array" method.
In scalar or list context populate is a proxy to the B<create> method (on which more below), and returns Row objects.
my $schema = MyDatabase::Schema->connect('dbi:SQLite:my.db');
-=item 2. Call the B<populate> method for the [Source] you wish to insert data into:
+=item 2. Call the B<populate> method for the ResultSource you wish to insert data into:
$schema->populate('User', [
- [ qw/id username, dob, realname, password/ ],
+ [ qw/id username dob realname password/ ],
[ 1, 'fredbloggs', '1910-02-01',
'Fred Bloggs', 'secretpass'],
]);
=back
-Note that in void context you can skip passing primary key values that will be supplied by the database. However no automatic assignment of foreign key values will be made, nor will any code in your Result classes be run (eg InflateColumn components).
+Note that in void context you can skip passing primary key values that will be supplied by the database, and any other values that are allowed to DEFAULT. However no code in your Result classes will be run (eg InflateColumn components).
=head2 Inserting with Row objects
INSERT INTO users (username, dob, realname, password)
VALUES ('fredbloggs', '1910-02-01', 'Fred Bloggs', 'secretpass');
-In the course of your application, you will often want to retrieve data from a user, insert it into the database, then continue to use or manipulate the resulting object.
+In the course of your application, you will often want to retrieve data from a user, insert it into the database, then continue to use or manipulate the resulting object (the object represents the state of the corresponding database row immediately after creation)
=over
INSERT INTO posts (user_id, created_date, title, post)
VALUES (1, '2010-03-24T09:00:00', 'First post!', 'Just testing my blog');
-Now that we have a user, they would like to submit their first blog post. We already have the user object, from creation, or from the session when they logged in, so we can create posts using it.
+Now that we have a user, they would like to submit their first blog post. We already have the user object, from creation, or from the session when they logged in, so we can create posts using it.
=over
=back
-This does not require us to dig out the user's database id and pass it to the insert call for the posts table, as it is already contained in the User object.
+This does not require us to dig out the user's database id and pass it to the insert call for the posts table, as it is already contained in the $user object.
=head2 Insert a new user and their first post
## new+insert in one
my $newuser = $schema->resultset('User')->create( $user_and_post );
-
+
=back
=head2 Insert using a SELECT as input: