Home  >  Article  >  Backend Development  >  Teach you how to use the PHP database migration tool 'Phinx'

Teach you how to use the PHP database migration tool 'Phinx'

WBOY
WBOYforward
2022-02-17 10:49:165882browse

This article will share with you the relevant knowledge about Phinx, the database migration tool in PHP. Phinx is particularly suitable for development, testing, online database synchronization field information, data information, generation and synchronization of test data. Wait, I hope it helps everyone.

Teach you how to use the PHP database migration tool 'Phinx'

Document address: https://tsy12321.gitbooks.io/phinx-doc/content

1. Installation

composer require nhzex/think-phinx

2. Execute

php vendor/bin/phinx

Directly run php vendor/bin/phinx init to generate the configuration file

Another method is to directly use the php file to make the configuration file

Directly run php vendor/bin/phinx init to generate the configuration file

Another method is to directly use the php file to make the configuration file File

3. Use phinx.php to configure

<?php
$config = array(
    &#39;DB_HOST&#39; => &#39;localhost&#39;,
    &#39;DB_NAME&#39; => &#39;root&#39;,
    &#39;DB_USER&#39; => &#39;root&#39;,
    &#39;DB_PWD&#39; => &#39;&#39;,
);
$settings = $config;
#phinx.php
<?php
require &#39;db_config.php&#39;;
return array(
    "paths" => array(
        "migrations"    => "db/migrations",
        "seeds"         => "db/seeds"
    ),
    "environments"   => array(
        "defaut_migration_table"    => "phinxlog",
        "default_database"          => "lleg",
        "default_environment"       => "development"
        "production"   => array(
            "adapter"   => "mysql",
            "host"      => $settings["DB_HOST"],
            "name"      => $settings["DB_NAME"],
            "user"      => $settings["DB_USER"],
            "pass"      => $settings["DB_PWD"],
            "port"      => 3306,
            "charset"   => "utf8"
        ),
        "development"   => array(
            "adapter"   => "mysql",
            "host"      => $settings["DB_HOST"],
            "name"      => $settings["DB_NAME"],
            "user"      => $settings["DB_USER"],
            "pass"      => $settings["DB_PWD"],
            "port"      => 3306,
            "charset"   => "utf8"
        )
    )
);

4.Execute php vendor/bin/phinx status Check the connection status

5. Execute php vendor/bin/phinx create migration

6. Now created /db/migrations/20180310020523_migration.php

Edit this file and add the database creation content.

public function change() {
        $user = $this->table(&#39;user&#39;);
        $user->addColumn(&#39;open_id&#39;, &#39;string&#39;, [&#39;limit&#39;=>64]);
        $user->addColumn(&#39;register_time&#39;, &#39;timestamp&#39;, [&#39;default&#39; => &#39;CURRENT_TIMESTAMP&#39;]);
        $user->addColumn(&#39;favorite_music&#39;, &#39;integer&#39;, [&#39;default&#39;=> 0, &#39;comment&#39;=>&#39;喜欢的音乐&#39;]);
        $user->addColumn(&#39;favorite_vedio&#39;, &#39;integer&#39;, [&#39;default&#39;=> 0, &#39;comment&#39;=>&#39;喜欢的视频数&#39;]);
        $user->addColumn(&#39;favorite_article&#39;, &#39;integer&#39;, [&#39;default&#39;=> 0, &#39;comment&#39;=>&#39;喜欢的文章数&#39;]);
        $user->addColumn(&#39;baby_birthday&#39;, &#39;date&#39;, [&#39;null&#39;=>true, &#39;comment&#39;=>&#39;宝宝生日&#39;]);
        $user->addColumn(&#39;baby_sex&#39;, &#39;boolean&#39;, [&#39;null&#39;=>true, &#39;comment&#39;=>&#39;宝宝性别&#39;]);
        $user->addColumn(&#39;last_login&#39;, &#39;datetime&#39;, [&#39;null&#39;=>true, &#39;comment&#39;=>&#39;最后登陆日期&#39;]);
        $user->save();
    }

7. By default, an auto-incrementing id will be added as the primary key

Execute php vendor/bin/phinx migrate

8. Initialize data

Execute php vendor/bin/phinx seed:create CategorySeeder

The system automatically creates created ./db/seeds/CategorySeeder.php

9. Modify CategorySeeder.php

Execute php vendor/bin/phinx seed:run and all Seed

10. If you want to run The specified Seed needs to be specified with the -s parameter

php vendor/bin/phinx seed:run -s CategorySeeder

11. Update the table structure

When you need to update the table structure, you need to create a migrate

Execute php vendor/bin/phinx create ChangeArtist

Then you need to update The content is written to the change function

public function change() {
        $this->execute(&#39;alter table resource drop column artist ;&#39;);
        $resource = $this->table(&#39;resource&#39;);
        $resource->addColumn(&#39;artist&#39;, &#39;string&#39;, [&#39;limit&#39;=>128, &#39;default&#39;=>&#39;&#39;]);
        $resource->update();
    }

Finally execute php vendor/bin/phinx migrate

The migrate that has been executed before will not be executed, only the updated part will be executed.

12. Rollback

php vendor/bin/phinx rollback

13. Data filling

php vendor/bin/phinx seed:create UserSeeder
php vendor/bin/phinx seed:run -e product

Generate file

<?php
use Phinx\Seed\AbstractSeed;
class UserSeeder extends AbstractSeed {
    /**
     * 插入数据
     */
    public function run() {
        $data = array(
          array(
              &#39;id&#39;    => 1,
          ),
          array(
              &#39;id&#39;    => 2,
          )
        );
        $posts = $this->table(&#39;users&#39;);
        $posts->insert($data)->save();
    }
}

phinx is particularly suitable for development, testing, online database synchronization field information, data information, generation and synchronization of test data, etc., so it is particularly suitable for use in the team development process, especially for a For new projects, as long as you insist on using phinx for independent deployment at the beginning of the project, every time the database table information is changed, team members can synchronize the code through git or svn and then execute the execution command mentioned above to synchronize the database table information. This avoids the cumbersomeness and errors of synchronizing library table information between different development environments during traditional development.

There is a configuration item "default_migration_table" in phinx.php => "phinxlog". Changes are recorded here. This is also a measure to ensure that they are not executed repeatedly, so there is no need to worry about losing or repeating the execution of the command. .

Recommended learning: "PHP Video Tutorial"

The above is the detailed content of Teach you how to use the PHP database migration tool 'Phinx'. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:Laravel技术社区公众号. If there is any infringement, please contact admin@php.cn delete