カテゴリー
Linux

Laravel 5.5 既存のデータベースからモデルを一発で逆生成した手順

まとめ

カテゴリー
Linux

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: https://carbon.nesbot.com/docs/#api-carbon-2

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 https://carbon.nesbot.com/ 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
Usage:
  iseed [options] [--] <tables>

Arguments:
  tables                                   comma separated string of table names

Options:
      --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

Help:
  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 は次のようになりました。

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

use Illuminate\Database\Seeder;

class WpCommentsTableSeeder extends Seeder
{

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

        \DB::table('wp_comments')->delete();
        
        \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' => 'https://wordpress.org/',
                'comment_author_IP' => '',
                'comment_date' => '2019-06-02 10:24:29',
                'comment_date_gmt' => '2019-06-02 01:24:29',
                'comment_content' => 'こんにちは、これはコメントです。
コメントの承認、編集、削除を始めるにはダッシュボードの「コメント画面」にアクセスしてください。
コメントのアバターは「<a href="https://gravatar.com">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) を見つけることができました。

以上です。

カテゴリー
Linux

Laravel 5.5 既存のデータベースからマイグレーションファイルを一発で生成した手順

まとめ

カテゴリー
コンピューター

Laravel プロジェクトのインストールで、ディレクトリを作成しないでカレントディレクトリへ直接インストールする方法

ディレクトリを作成しないでカレントディレクトリへ Laravel をインストールする方法

  • プロジェクト名は指定しないで、 . を指定する。
composer create-project --prefer-dist laravel/laravel . &quot;5.5.*&quot;
カテゴリー
コンピューター

Docker の php:apache に、Composer を使えるようにする Dockerfile を作る

まとめ。Composer が使える Docker の php:apache の Dockerfile

From php:apache
RUN apt-get update && apt-get install -y \
    unzip \
    zlib1g-dev \
    && docker-php-ext-install \
    zip \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*
RUN curl -s http://getcomposer.org/installer | php && \
    mv composer.phar /usr/local/bin/composer

これが最低限必要なものを追加した Dockerfile と思いますが、ちょっと及び腰で念の為という気持ちで、利便性や、参考ページにあったものも一応追加したものが次となります。

  • git はインストールしなくても使えるが入れた。
  • echo "export PATH=${PATH}:/var/www/vendor/bin" >> ~/.bashrc && \ も無くてもよいと思う (未検証) が、一応入れた。
From php:apache
RUN apt-get update && apt-get install -y \
    git \
    unzip \
    zlib1g-dev \
    && docker-php-ext-install \
    zip \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*
RUN curl -s http://getcomposer.org/installer | php && \
    echo "export PATH=${PATH}:/var/www/vendor/bin" >> ~/.bashrc && \
    mv composer.phar /usr/local/bin/composer
カテゴリー
Linux

Laravel 5.7 をインストールするのに必要な PHP 拡張は Docker の php:7.2-apache に含まれていました。

Laravel 5.7 の求める PHP 拡張

には次のようにありました。

カテゴリー
Linux

Laradock の Getting Started で Laravel 開発環境構築メモ

Laradock で編集必要な点まとめ

  • cp env-example .env すること
  • .env の、APP_CODE_PATH_HOST を編集すること

前提

次のアプリが使用可能なこと

  • Git
  • Docker
  • Composer

Laradock で環境構築したい Laravel プロジェクト概要

  • samplelaravel ディレクトリを作り、その中で作業する。
  • Laravel プロジェクト名を、SampleProject とする。
  • Laravel 5.4.36
  • MySQL 8.0.12