singularize, less S::L, more win
[dbsrgits/dbix-class-introduction-presentation.git] / slideshow.html
index 68f2a07..d419494 100644 (file)
@@ -77,8 +77,8 @@
       <h1>Authors</h1>
       <h4>Originally Leo Lapworth @ LPW 2009</h4>
       <h4>Matthew S. Trout</h4>
-      <h4>Arthur Axel "fREW" Schmidt</h4>
       <h4>Justin D. Hunter</h4>
+      <h4>Arthur Axel "fREW" Schmidt</h4>
    </div>
 
    <div class="slide">
    </div>
 
    <div class="slide">
-      <h1>why this talk?</h1>
-      <ul>
-         <li>Help avoid mistakes I made!</li>
-         <li>Help learn DBIx::Class faster</li>
-         <li>Make your coding easier</li>
-      </ul>
-   </div>
-
-   <div class="slide">
       <h1>point of note</h1>
-      <p><em>"Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it." - Brian W. Kernighan</em></p>
-      <p>This talk is about making it easy so we are less likely to get confused</p>
-   </div>
+      <p><em>"Debugging is twice as hard as writing the code in the first
+      place. Therefore, if you write the code as cleverly as possible,
+      you are, by definition, not smart enough to debug it." - Brian
+      W. Kernighan</em></p>
 
-   <div class="slide">
-      <h1>table setup</h1>
+      <p>This talk is about making it easy so we are less likely to get
+      confused</p>
    </div>
 
    <div class="slide">
-      <h1>example...</h1>
+      <h1>Examples Table Setup</h1>
       <ul>
          <li>Authors</li>
          <li>Books</li>
       </ul>
+      <em>MySQL not recommended</em>
    </div>
 
    <div class="slide">
    <div class="slide">
       <h1>tips</h1>
       <p>Name tables as simple plurals (<strong>add an S</strong>) - makes relationships easier to understand</p>
-      <p>(issue: Matt Trout "Tables should not be plural as gives you plurals for Result:: package names which represent a single row" - talk may be rewritten in future to reflect this as this is better once you understand the relationship setup - either way, consistency is important)</p>
       <p>Use a character set (<strong>UTF8</strong>) from the start (for international characters)</p>
    </div>
 
    <div class="slide">
       <h1>books table</h1>
 <pre>CREATE TABLE books(
-   id     int(8) primary key auto_increment,
-   title  varchar(255),
-   author int(8),foreign key (author)
+   id        int(8) primary key auto_increment,
+   title     varchar(255),
+   author_id int(8),foreign key (author)
       references authors(id)
 ) engine = InnoDB DEFAULT CHARSET=utf8;</pre>
    </div>
    <div class="slide">
       <h1>tips</h1>
       <p>Name link fields as singular</p>
-      <p>Check foreign key is the same field and type and size in both tables</p>
+      <p>Ensure foreign key is the same type and size in both tables</p>
    </div>
 
    <div class="slide">
       <h1>books table</h1>
 <pre>CREATE TABLE books(
-   id     int(8) primary key auto_increment,
-   title  varchar(255),
-   author <strong>int(8)</strong>,<strong>foreign key (<em>author</em>)</strong>
+   id        int(8) primary key auto_increment,
+   title     varchar(255),
+   author_id <strong>int(8)</strong>,<strong>foreign key (<em>author</em>)</strong>
       <strong>references <em>authors(id)</em></strong>
 ) engine = InnoDB DEFAULT CHARSET=utf8;</pre>
    </div>
    </div>
 
    <div class="slide">
-      <h1>manual: create</h1>
+      <h1>SQL: Create</h1>
 <pre>my $sth = $dbh-&gt;prepare('
    INSERT INTO books
    (title, author)
@@ -219,20 +211,7 @@ $sth-&gt;execute(
    </div>
 
    <div class="slide">
-      <h1>manual: create</h1>
-<pre>my $sth = $dbh-&gt;prepare('
-   <strong>INSERT INTO books
-   (title, author)
-   values (?,?)</strong>
-');
-
-$sth-&gt;execute(
-  'A book title', <strong><em>$author_id</em></strong>
-);</pre>
-   </div>
-
-   <div class="slide">
-      <h1>manual: retrieve</h1>
+      <h1>SQL: Read</h1>
 <pre>my $sth = $dbh-&gt;prepare('
    SELECT title,
    authors.name as author_name
@@ -242,7 +221,7 @@ $sth-&gt;execute(
    </div>
 
    <div class="slide">
-      <h1>manual: retrieve</h1>
+      <h1>SQL: Read</h1>
 <pre>while( my $book = $sth-&gt;fetchrow_hashref() ) {
   print 'Author of '
      . $book-&gt;{title}
@@ -253,7 +232,7 @@ $sth-&gt;execute(
    </div>
 
    <div class="slide">
-      <h1>manual: update</h1>
+      <h1>SQL: Update</h1>
 <pre>my $update = $dbh-&gt;prepare('
    UPDATE books
    SET title = ?
@@ -266,7 +245,7 @@ $update-&gt;execute(
    </div>
 
    <div class="slide">
-      <h1>manual: delete</h1>
+      <h1>SQL: Delete</h1>
 <pre>my $delete = $dbh-&gt;prepare('
    DELETE FROM books
    WHERE id = ?
@@ -280,44 +259,23 @@ $delete-&gt;execute(<strong>$book_id</strong>);</pre>
    </div>
 
    <div class="slide">
-      <h1>DBIC: create</h1>
+      <h1>DBIC: Create</h1>
 <pre>my $book = $book_model-&gt;create({
    title  =&gt; 'A book title',
    author =&gt; $author_id,
 });</pre>
       <p>Look ma, no SQL!</p>
-      <p><strong>Tip:</strong> do not pass in primary_key field, even if it's empty/undef as the object returned will have an empty id, even if your field is auto increment.</p>
    </div>
 
    <div class="slide">
-      <h1>DBIC: create</h1>
-<pre>my $book = $book_model-&gt;create({
-   title  =&gt; 'A book title',
-   author =&gt; <strong>$author_id</strong>,
-});</pre>
-   </div>
-
-   <div class="slide">
-      <h1>DBIC: create</h1>
+      <h1>DBIC: Create</h1>
 <pre>my $pratchett = $author_model-&gt;create({
    name =&gt; 'Terry Pratchett',
 });</pre>
    </div>
 
    <div class="slide">
-      <h1>DBIC: create</h1>
-<pre>my $book = $pratchett-&gt;create_related(
-  books =&gt; {
-   title =&gt; 'Another Discworld book',
-});</pre>
-<strong>or</strong>
-<pre>my $book = $pratchett-&gt;add_to_books({
-   title =&gt; 'Another Discworld book',
-});</pre>
-   </div>
-
-   <div class="slide">
-      <h1>DBIC: create</h1>
+      <h1>DBIC: Create</h1>
 <pre>my $book = $pratchett-&gt;create_related(
   <strong>books</strong> =&gt; {
    title =&gt; 'Another Discworld book',
@@ -329,18 +287,18 @@ $delete-&gt;execute(<strong>$book_id</strong>);</pre>
    </div>
 
    <div class="slide">
-      <h1>DBIC: retrieve</h1>
+      <h1>DBIC: Read</h1>
       <p>DBIx::Class - Lots of ways to do the same thing...</p>
       <p><em>"There is more than one way to do it (TIMTOWTDI, usually pronounced "Tim Toady") is a Perl motto"</em></p>
    </div>
 
    <div class="slide">
-      <h1>DBIC: retrieve</h1>
+      <h1>DBIC: Read</h1>
 <pre>my $book = $book_model-&gt;find($book_id);
 
 my $book = $book_model-&gt;search({
    title =&gt; 'A book title',
-})-&gt;single;
+}, { rows =&gt; 1 })-&gt;single;
 
 my @books = $book_model-&gt;search({
    author =&gt; $author_id,
@@ -348,8 +306,8 @@ my @books = $book_model-&gt;search({
    </div>
 
    <div class="slide">
-      <h1>DBIC: retrieve</h1>
-<pre>while( my $book = $books_rs-&gt;next() ) {
+      <h1>DBIC: Read</h1>
+<pre>while( my $book = $books_rs-&gt;next ) {
  print 'Author of '
     . $book-&gt;title
     . ' is '
@@ -359,8 +317,8 @@ my @books = $book_model-&gt;search({
    </div>
 
    <div class="slide">
-      <h1>DBIC: retrieve</h1>
-<pre>my $books_rs = $book_model-&gt;search({
+      <h1>DBIC: Read</h1>
+<pre>my $books_rs = $book_rs-&gt;search({
    author =&gt; $author_id,
 });</pre>
       <p>Search takes SQL::Abstract formatted queries</p>
@@ -368,14 +326,14 @@ my @books = $book_model-&gt;search({
    </div>
 
    <div class="slide">
-      <h1>DBIC: update</h1>
+      <h1>DBIC: Update</h1>
 <pre>$book-&gt;update({
   title =&gt; 'New title',
 });</pre>
    </div>
 
    <div class="slide">
-      <h1>DBIC: delete</h1>
+      <h1>DBIC: Delete</h1>
 <pre>$book-&gt;delete;</pre>
    </div>
 
@@ -384,92 +342,100 @@ my @books = $book_model-&gt;search({
    </div>
 
    <div class="slide">
-      <pre>Example of a DBIC Result</pre>
-   </div>
-
-   <div class="slide">
-      <pre>Example of a DBIC Result</pre>
+<pre>package Foo::Schema::Result::Author;
+use strict; use warnings;
+__PACKAGE__-&gt;table('authors');
+__PACKAGE__-&gt;add_columns(
+  id =&gt; {
+    data_type =&gt; 'int',
+    size      =&gt; 8,
+  },
+  title =&gt; {
+    data_type   =&gt; 'varchar',
+    is_nullable =&gt; 1,
+    size        =&gt; 255,
+  },
+);
+__PACKAGE__-&gt;set_primary_key('id');
+__PACKAGE__-&gt;has_many( books =&gt;
+   'Foo::Schema::Result::Book', 'author_id'
+);
+1;
+</pre>
    </div>
 
    <div class="slide">
-      <p>too much typing!  too much maintenance!</p>
-      <p>too much maintenance!</p>
+<pre>package Foo::Schema::Result::Book;
+use strict; use warnings;
+__PACKAGE__-&gt;table('books');
+__PACKAGE__-&gt;add_columns(
+  id =&gt; {
+    data_type =&gt; 'int',
+    size      =&gt; 8,
+  },
+  name =&gt; {
+    data_type   =&gt; 'varchar',
+    is_nullable =&gt; 1,
+    size        =&gt; 255,
+  },
+  author_id =&gt; {
+    data_type   =&gt; 'int',
+    size        =&gt; 8,
+    is_nullable =&gt; 1, # &lt;-- probably should be 0
+  },
+);
+__PACKAGE__-&gt;set_primary_key('id');
+__PACKAGE__-&gt;belongs_to( author =&gt;
+   'Foo::Schema::Result::Author', 'author_id'
+);
+1;
+</pre>
    </div>
 
    <div class="slide">
       <h1>Schema::Loader</h1>
-      <pre>code for S::L here</pre>
-   </div>
+      <p>DB -&gt; Perl vs Perl -&gt; DB</p>
+<pre>package Foo::Schema;
+use strict; use warnings;
+use base 'DBIx::Class::Schema::Loader';
+__PACKAGE__-&gt;loader_options({
+   naming =&gt; 'v7',
+   debug  =&gt; $ENV{DBIC_TRACE},
+});
+1;
 
-   <div class="slide">
-      <h1>splitting logic cleanly</h1>
-      <p>Foo::Schema::Result::Foo = an individual row</p>
-      <p>Foo::Schema::ResultSet::Foo = searches / results</p>
-   </div>
+# elsewhere...
 
-   <div class="slide">
-      <h1>using your Schema</h1>
-      <pre>example usage code goes here</pre>
+my $schema = Foo::Schema-&gt;connect($dsn, $user, $pass);
+</pre>
    </div>
 
    <div class="slide">
-      <h1>DEBUGGING</h1>
-      <pre>DBIC_TRACE=1 ./your_script.pl</pre>
+      <h1>Splitting Logic Cleanly</h1>
+      <p>Foo::Schema::Result::Bar = individual row</p>
+      <p>Foo::Schema::ResultSet::Bar = searches / table </p>
    </div>
 
    <div class="slide">
-      <h1>Schema::Loader</h1>
-<pre>Foo::Schema::Result::Authors-&gt;table("authors");
-Foo::Schema::Result::Authors-&gt;add_columns(
-   id =&gt; {
-      data_type     =&gt; "INT",
-      default_value =&gt; undef,
-      is_nullable   =&gt; 0,
-      size          =&gt; 8
-   },
-   title =&gt; {
-      data_type     =&gt; "VARCHAR",
-      default_value =&gt; undef,
-      is_nullable   =&gt; 1,
-      size          =&gt; 255,
-   },
-);
-Foo::Schema::Result::Authors-&gt;set_primary_key("id");</pre>
-   </div>
-
-   <div class="slide">
-      <h1>Schema::Loader</h1>
-<pre>Foo::Schema::Result::Books->table("books");
-Foo::Schema::Result::Books->add_columns(
-   id =&gt; {
-      data_type     =&gt; "INT",
-      default_value =&gt; undef,
-      is_nullable   =&gt; 0,
-      size          =&gt; 8
-   },
-   name =&gt; {
-      data_type     =&gt; "VARCHAR",
-      default_value =&gt; undef,
-      is_nullable   =&gt; 1,
-      size          =&gt; 255,
-   },
-   author =&gt; {
-      data_type     =&gt; "INT",
-      default_value =&gt; undef,
-      is_nullable   =&gt; 1,
-      size          =&gt; 8
-   },
-);
-Foo::Schema::Result::Books-&gt;set_primary_key("id");</pre>
+      <h1>Using your Schema</h1>
+<pre>#!perl
+use strict; use warnings;
+use lib 'lib';
+use Foo::Schema;
+my $schema = Foo::Schema-&gt;connect($dns, $user, $pass);
+my $author_rs = $schema-&gt;resultset('Author');
+my $author    = $author_rs-&gt;create({
+   name =&gt; 'Douglas Adams',
+});
+my $book = $author-&gt;add_to_books({
+   title =&gt; '42',
+});
+</pre>
    </div>
 
    <div class="slide">
-      <h1>Schema::Loader</h1>
-<pre>Foo::Schema::Result::Authors-&gt;has_many(books =&gt; "Foo::Schema::Books",
-   { "foreign.author" =&gt; "self.id" });
-
-Foo::Schema::Result::Books-&gt;belongs_to(author =&gt; "Foo::Schema::Authors",
-   { id =&gt; "author" });</pre>
+      <h1>DEBUGGING</h1>
+      <pre>DBIC_TRACE=1 ./your_script.pl</pre>
    </div>
 
    <div class="slide">
@@ -483,19 +449,21 @@ INSERT INTO books (author, title)
 
    <div class="slide">
       <h1>overloading</h1>
-<pre>Foo::Schema::Result::Books
-Foo::Schema::ResultSet::Books
-Foo::Schema::Result::Authors
-Foo::Schema::ResultSet::Books</pre>
+<pre>Foo::Schema::Result::Book
+Foo::Schema::ResultSet::Book
+Foo::Schema::Result::Author
+Foo::Schema::ResultSet::Book</pre>
    </div>
 
    <div class="slide">
       <h1>Result::</h1>
-<pre>package Foo::Schema::Result::Books;
-use base 'DBIx::Class';
+<pre>package Foo::Schema::Result::Book;
+use base 'DBIx::Class::Core';
 use strict;
 use warnings;
 
+# Result code here
+
 sub isbn {
    my $self = shift;
 
@@ -517,39 +485,22 @@ sub isbn {
 
    <div class="slide">
       <h1>Result:: (inflating)</h1>
-<pre>package Foo::Schema::Result::Books;
-use base 'DBIx::Class';
+<pre>package Foo::Schema::Result::Book;
+use base 'DBIx::Class::Core';
 use strict;
 use warnings;
 
+# Result code here
+
+__PACKAGE__-&gt;load_components('InflateColumn');
 use DateTime::Format::MySQL;
 
 __PACKAGE__-&gt;<strong>inflate_column</strong>(
    <strong>date_published</strong> =&gt; {
       inflate =&gt; sub { DateTime::Format::MySQL-&gt;parse_date(shift) },
       deflate =&gt; sub { shift-&gt;ymd},
-   }
-);
-# Automatic see: DBIx::Class::InflateColumn::DateTime</pre>
-   </div>
-
-   <div class="slide">
-      <h1>Result:: (inflating)</h1>
-<pre>package Foo::Schema::Result::Books;
-use base 'DBIx::Class';
-use strict;
-use warnings;
-
-use DateTime::Format::MySQL;
-
-__PACKAGE__-&gt;inflate_column(
-   date_published =&gt; {
-      <strong>inflate =&gt; sub { DateTime::Format::MySQL-&gt;parse_date(shift) },
-      deflate =&gt; sub { shift-&gt;ymd},</strong>
-   }
+   },
 );
-# Automatic see: DBIx::Class::InflateColumn::DateTime
-# Automatic see: DBIx::Class::InflateColumn::DateTime
 # Automatic see: DBIx::Class::InflateColumn::DateTime</pre>
    </div>
 
@@ -585,63 +536,32 @@ sub by_author {
 
    <div class="slide">
       <h1>ResultSets::</h1>
-<pre>package Foo::Schema::<strong>ResultSet::Books</strong>;
-use base '<strong>DBIx::Class::ResultSet</strong>';
-sub the_ultimate_books {
-   my $self = shift;
-   <strong>return $self-&gt;search({ title =&gt; { -like =&gt; '%42%' } })</strong>
-}
-sub by_author {
-   my ( $self, $author ) = @_;
-   return $self-&gt;search({ author =&gt; $author-&gt;id })
-}
-
-1;</pre>
-   </div>
-
-   <div class="slide">
-      <h1>ResultSets::</h1>
-<pre>package Foo::Schema::ResultSet::Books;
-use base 'DBIx::Class::ResultSet';
-sub the_ultimate_books {
-   my $self = shift;
-   return $self-&gt;search({ title =&gt; { -like =&gt; '%42%' } });
-}
-sub by_author {
-   my ( $self, $author ) = @_;
-   <strong>return $self-&gt;search({ author =&gt; $author-&gt;id })</strong>
-}
-
-1;</pre>
-   </div>
-
-   <div class="slide">
-      <h1>ResultSets::</h1>
 <pre>use Foo::Schema;
-my $book_model = Foo::Schema-&gt;resultset('Books');
-my $book_rs    = $book_model-&gt;the_ultimate_books;
-my @books      = $book_rs-&gt;all;</pre>
+my $schema = Foo::Schema-&gt;connect(...);
+my $book_rs     = Foo::Schema-&gt;resultset('Book');
+my $book_search = $book_rs-&gt;the_ultimate_books;
+my @books       = $book_search-&gt;all;</pre>
    </div>
 
    <div class="slide">
-      <h1>ResultSets::chaining</h1>
-<pre>use Foo::Schema;
-my $book_model   = Foo::Schema-&gt;resultset('Books');
-my $author_model = Foo::Schema-&gt;resultset('Authors');
+      <h1>ResultSets: Chaining</h1>
+<pre>
+my $book_rs      = $schema-&gt;resultset('Book');
+my $author_rs    = $schema-&gt;resultset('Author');
 my $author       = $author_model-&gt;search({ name =&gt; 'Douglas Adams' })-&gt;single;
 my $book_rs      = $book_model-&gt;the_ultimate_books-&gt;by_author($author);
 my @books        = $book_rs-&gt;all;</pre>
    </div>
 
    <div class="slide">
-      <h1>ResultSets::chaining</h1>
-<pre>my $book_rs = $book_model
+      <h1>ResultSets: Chaining</h1>
+<pre>$book_rs = $schema-&gt;resultset('Book')
   -&gt;the_ultimate_books
   -&gt;by_author($author);</pre>
 or
 
-<pre>my $book_rs = $book_model
-  -&gt;the_ultimate_books();
+<pre>my $book_rs = $schema-&gt;resultset('Book')
+  -&gt;the_ultimate_books;
 $book_rs = $book_rs-&gt;by_author($author);</pre>
 <pre># Debug (SQL):
 
@@ -665,12 +585,8 @@ my @books = $rs-&gt;all;</pre>
 
    <div class="slide">
       <h1>overloading before new record</h1>
-   </div>
-
-   <div class="slide">
-      <h1>overloading before new record</h1>
-      <pre>package Foo::Schema::Result::Authors;
-use base 'DBIx::Class';
+      <pre>package Foo::Schema::Result::Author;
+use base 'DBIx::Class::Core';
 
 sub new {
    my ( $class, $attrs ) = @_;
@@ -682,47 +598,29 @@ sub new {
 1;</pre>
 
    <div class="slide">
-      <h1>relationships</h1>
+      <h1>Relationships</h1>
    </div>
 
    <div class="slide">
-      <h1>multiple authors</h1>
+      <h1>Multiple Authors</h1>
    </div>
 
    <div class="slide">
       <h1>a few relationships</h1>
+      (really need picture here)
       (authors -- author_link_to_book -- books)
    </div>
 
    <div class="slide">
-      <h1>a few relationships</h1>
-      !
-   </div>
-
-   <div class="slide">
-      <h1>new join table</h1>
-<pre>CREATE TABLE author_and_books(
-  id      int(8)    primary key auto_increment,
-  book    int(8),
-  author  int(8),
-  foreign key (book)     references books(id),
-  foreign key (author)   references authors(id)
-) engine = InnoDB DEFAULT CHARSET=utf8;
-
-ALTER TABLE `books` DROP `author`</pre>
-   </div>
-
-   <div class="slide">
-      <h1>new join table</h1>
+      <h1>Join Table</h1>
 <pre>CREATE TABLE author_and_books(
-  id      int(8)    primary key auto_increment,
-  book    int(8),
-  author  int(8),
-  <strong>foreign key (book)     references books(id),
-  foreign key (author)   references authors(id)</strong>
+  book_id    int(8),
+  author_id  int(8),
+  foreign key (book_id)     references books(id),
+  foreign key (author_id)   references authors(id)
 ) engine = InnoDB DEFAULT CHARSET=utf8;
 
-ALTER TABLE `books` DROP `author`</pre>
+ALTER TABLE `books` DROP `author`;</pre>
    </div>
 
    <div class="slide">
@@ -731,26 +629,11 @@ ALTER TABLE `books` DROP `author`</pre>
 
    <div class="slide">
       <h1>has_many</h1>
-<pre>package Foo::Schema::<strong>Result::Books</strong>;
-
-__PACKAGE__-&gt;has_many( author_and_books =&gt; "Foo::Schema::Result::AuthorAndBooks",
-    { "foreign.book" =&gt; "self.id" },
-);
-
-<strong># This is auto generated by Schema::Loader</strong></pre>
-   </div>
-
-   <div class="slide">
-      <h1>has_many</h1>
-<pre>package Foo::Schema::<strong>Result::Books</strong>;
+<pre>package Foo::Schema::<strong>Result::Book</strong>;
 
-__PACKAGE__-&gt;has_many(
-author_and_books =&gt; <strong># name of accessor</strong>
-"Foo::Schema::Result::AuthorAndBooks", <strong># related class</strong>
-    { "foreign.book" =&gt; "self.id" } <strong># Relationship (magic often works if not
-                                        # specified, but avoid!)</strong>
+__PACKAGE__-&gt;has_many( author_and_books =&gt;
+   'Foo::Schema::Result::Author_Book', 'book_id'
 );
-</pre>
    </div>
 
    <div class="slide">
@@ -759,12 +642,11 @@ author_and_books =&gt; <strong># name of accessor</strong>
 
    <div class="slide">
       <h1>belongs_to</h1>
-<pre>package Foo::Schema::<strong>Result::AuthorAndBooks</strong>;
+<pre>package Foo::Schema::<strong>Result::Author_Book</strong>;
 
 __PACKAGE__-&gt;belongs_to(
-   book =&gt; <strong># Accessor name</strong>
-   "Foo::Schema::Result::Books", <strong># Related class</strong>
-   { id =&gt; "book" } <strong># relationship</strong>
+   book =&gt;
+   'Foo::Schema::Result::Book', 'book_id'
 );
 </pre>
    </div>
@@ -774,31 +656,26 @@ __PACKAGE__-&gt;belongs_to(
    </div>
 
    <div class="slide">
-      <h1>with no coding...</h1>
-   </div>
-
-   <div class="slide">
       <h1>many_to_many</h1>
    </div>
 
    <div class="slide">
       <h1>many_to_many</h1>
-      <pre>package Foo::Schema::<strong>Result::Books</strong>;
-use base 'DBIx::Class';
+      <pre>package Foo::Schema::<strong>Result::Book</strong>;
+use base 'DBIx::Class::Core';
 
 __PACKAGE__-&gt;many_to_many(
-   authors =&gt; "author_and_books", 'author'
+   authors =&gt; 'author_and_books', 'author'
 );
 
 1;
-
-<strong> # This is <em>NOT</em> auto generated by Schema::Loader </strong></pre>
+</pre>
    </div>
 
    <div class="slide">
       <h1>many_to_many</h1>
-      <pre>package Foo::Schema::<strong>Result::Books</strong>;
-use base 'DBIx::Class';
+      <pre>package Foo::Schema::<strong>Result::Book</strong>;
+use base 'DBIx::Class::Core';
 
 __PACKAGE__-&gt;many_to_many(
    authors <strong># Accessor name</strong>
@@ -811,8 +688,8 @@ __PACKAGE__-&gt;many_to_many(
 
    <div class="slide">
       <h1>many_to_many</h1>
-      <pre>package Foo::Schema::Result::Authors;
-use base 'DBIx::Class';
+      <pre>package Foo::Schema::Result::Author;
+use base 'DBIx::Class::Core';
 
 __PACKAGE__-&gt;many_to_many(
    "books" <strong># Accessor Name</strong>
@@ -821,8 +698,7 @@ __PACKAGE__-&gt;many_to_many(
 );
 
 1;
-
-<strong># This is <em>NOT</em> auto generated by Schema::Loader</strong></pre>
+</pre>
    </div>
 
    <div class="slide">