Laravel 5.5 既存のデータベースからレコード情報のシーダーファイルを一発で生成した手順




  • Laravel Framework 5.5.45
  • Inverse seed generator (iSeed) v2.6.1

Inverse seed generator (iSeed) インストール

composer require orangehill/iseed --dev


$ docker-compose run --rm composer require orangehill/iseed --dev
Using version ^2.6 for orangehill/iseed
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
  - Installing orangehill/iseed (v2.6.1): Downloading (100%)
Package phpunit/phpunit-mock-objects is abandoned, you should avoid using it. No replacement was suggested.
Writing lock file
Generating optimized autoload files
 /!\ Warning, you're using a deprecated
 ¨¨¨ version of Carbon, we will soon stop
     providing support and update for 1.x
     versions, please upgrade to Carbon 2.

Most features of Carbon 1 are still available in Carbon 2.
See how to migrate:

Please consider upgrading your Laravel dependencies to be compatible with Carbon 2:
  - laravel/framework at least to version 5.8.0

If you can't update Laravel, check to see how to
install Carbon 2 using alias version and our adapter kylekatarnls/laravel-carbon-2

You can run './vendor/bin/upgrade-carbon' to get help in updating carbon and other frameworks and libraries that depend on it.
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover
Discovered Package: fideloper/proxy
Discovered Package: laravel/tinker
Discovered Package: nesbot/carbon
Discovered Package: orangehill/iseed
Package manifest generated successfully.

Inverse seed generator (iSeed) の help

# php artisan help iseed
  iseed [options] [--] <tables>

  tables                                   comma separated string of table names

      --clean                              clean iseed section
      --force                              force overwrite of all existing seed classes
      --database[=DATABASE]                database connection [default: "mysql"]
      --max[=MAX]                          max number of rows
      --chunksize[=CHUNKSIZE]              size of data chunks for each insert query
      --exclude[=EXCLUDE]                  exclude columns
      --prerun[=PRERUN]                    prerun event name
      --postrun[=POSTRUN]                  postrun event name
      --dumpauto[=DUMPAUTO]                run composer dump-autoload [default: true]
      --noindex                            no indexing in the seed
      --orderby[=ORDERBY]                  orderby desc by column
      --direction[=DIRECTION]              orderby direction
      --classnameprefix[=CLASSNAMEPREFIX]  prefix for class and file name
      --classnamesuffix[=CLASSNAMESUFFIX]  suffix for class and file name
  -h, --help                               Display this help message
  -q, --quiet                              Do not output any message
  -V, --version                            Display this application version
      --ansi                               Force ANSI output
      --no-ansi                            Disable ANSI output
  -n, --no-interaction                     Do not ask any interactive question
      --env[=ENV]                          The environment the command should run under
  -v|vv|vvv, --verbose                     Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug

  Generate seed file from table

Inverse seed generator (iSeed) を実際に動かす


# php artisan iseed wp_commentmeta,wp_comments,wp_links,wp_options,wp_postmeta,wp_posts,wp_term_relationships,wp_term_taxonomy,wp_termmeta,wp_terms,wp_usermeta,wp_users
Created a seed file from table wp_commentmeta
Created a seed file from table wp_comments
Created a seed file from table wp_links
Created a seed file from table wp_options
Created a seed file from table wp_postmeta
Created a seed file from table wp_posts
Created a seed file from table wp_term_relationships
Created a seed file from table wp_term_taxonomy
Created a seed file from table wp_termmeta
Created a seed file from table wp_terms
Created a seed file from table wp_usermeta
Created a seed file from table wp_users

結果、 database/seeds/ に上記のファイルが追加され、さらに、 database/seeds/DatabaseSeeder.php に上記ファイルを実行するように追記されていました。


例えば database/seeds/WpCommentsTableSeeder.php は次のようになりました。

  • まずレコードを全て削除してからデータを追加する流れ。
  • ファイルの各行の行末に不要なスペースが高い頻度で混じっている。

use Illuminate\Database\Seeder;

class WpCommentsTableSeeder extends Seeder

     * Auto generated seed file
     * @return void
    public function run()

        \DB::table('wp_comments')->insert(array (
            0 => 
            array (
                'comment_ID' => 1,
                'comment_post_ID' => 1,
                'comment_author' => 'WordPress コメントの投稿者',
                'comment_author_email' => 'wapuu@wordpress.example',
                'comment_author_url' => '',
                'comment_author_IP' => '',
                'comment_date' => '2019-06-02 10:24:29',
                'comment_date_gmt' => '2019-06-02 01:24:29',
                'comment_content' => 'こんにちは、これはコメントです。
コメントのアバターは「<a href="">Gravatar</a>」から取得されます。',
                'comment_karma' => 0,
                'comment_approved' => '1',
                'comment_agent' => '',
                'comment_type' => '',
                'comment_parent' => 0,
                'user_id' => 0,


Laravel 5.5 既存のデータベースからマイグレーションファイルを一発で生成した手順 – oki2a24 で疑問視したように、マイグレーションファイルで既存のデータベースの情報をマイグレーションファイルとして生成したとしても、データベースレコードも使いたい場合は意味がありません。レコードも抽出できれば良いのに、という問題がありました。



既存のデータベースのレコード数が非常に大きな場合、シーダークラスファイルに抽出して、というのはシーダークラスファイルの大きさが非常に大きくなり、また、DB へ入れる際にも非常に時間がかかると予想されるため、良い方法とは言えないと思います。



最後に、参考ページです。このページのおかげで、 Inverse seed generator (iSeed) を見つけることができました。