标签: phinx

CakePHP 3.x数据库迁移插件:有没有办法更改表字段?

我试图找出如何使用CakePHP Migrations插件最好地修改MySQL Table的现有列.我不需要添加或删除列,我只想修改字符串列的长度.

目前该列被定义为varchar(50); 我正在重新调整列,并希望将其定义为varchar(2000).

迁移的目标是成为典型Web服务器上标准CakePHP Web应用程序安装的自动部署的一部分.

我可以说,看起来ALTER使用迁移插件实现此目的的唯一方法(除了语句之外)将是:

  1. 重命名列
  2. 添加新列
  3. 将现有数据移动/复制到新列
  4. 放下旧栏目

也许我错过了文档和无数教程中的讨论以及如何以更好的方式实现这一目标,但这似乎是一种麻烦且自我挫败的方法.

我已经完成了CakePHP Migration Plugin的文档Phinx的文档,但是我没有看到推荐的方法来进行这种更改.我很感激任何输入.

php cakephp database-migration cakephp-3.0 phinx

3
推荐指数
1
解决办法
3373
查看次数

Biginteger auto_increment主键Phinx

我正在尝试使用biginteger-primary密钥创建迁移并将其切换为auto_increment.

我正在使用robmorgans Phinx来创建迁移.

是否可以在创建数据类型BIGINTEGER后将表的主键更改为auto_incremented?

目前它看起来像这样.

$positions = $this->table('positions', ['id' => false, 'primary_key' => 'id'])
        ->changeColumn('id', 'biginteger', ['auto_increment' => true])
        ->addColumn('work_order_id', 'char', ['after' => 'vehicle_id','default' => null, 'null' => true,'limit' => 36])
        ->update();
Run Code Online (Sandbox Code Playgroud)

cakephp auto-increment phinx

3
推荐指数
1
解决办法
2187
查看次数

使用 Phinx Migrate 添加“varbinary”MySQL 字段类型

我正在尝试在 Phinx 中创建一个迁移,它将在 MySQL 数据库中创建一个 varbinary 类型字段来存储一个 ip_address。

这就是我所拥有的:

$table = $this->table('my_table');
$table->addColumn('ip_address', 'varbinary', ['after' => 'id', 'limit' => 16])
->save();
Run Code Online (Sandbox Code Playgroud)

然而,这只是返回:

[InvalidArgumentException]
为列“ip_address”指定了无效的列类型“varbinary”。

我尝试使用“二进制”,但这最终变成了 BLOB。:/

mysql migration varbinary phinx

3
推荐指数
1
解决办法
1049
查看次数

文件“phinx.yml”不存在

我在初始化期间使用 --format php 设置了 phinx。它在 /config/database 文件夹中作为 database.php 每当我尝试运行迁移时,我都会收到以下错误。

文件“phinx.yml”不存在。

我现在使用 .yml 文件。

我的 phinx.php 在我的根目录中,看起来像这样

<?php

return
[
    'paths' => [
        'migrations' => './database/migrations',
        'seeds' => './database/seeds'
    ],
    'environments' => [
        'default_migration_table' => 'phinxlog',
        'default_database' => env('DB_ENV'),
        'production' => [
            'adapter' => env('DB_CONNECTION'),
            'host' => env('DB_HOST'),
            'name' => env('DB_DATABASE'),
            'user' => env('DB_USERNAME'),
            'pass' => env('DB_PASSWORD'),
            'port' => env('DB_PORT', 3306),
            'charset' => env('DB_CHARSET', 'utf8'),
            'table_prefix' => ''
        ],
        'development' => [
            'adapter' => env('DB_CONNECTION'),
            'host' => env('DB_HOST'),
            'name' => env('DB_DATABASE'), …
Run Code Online (Sandbox Code Playgroud)

php phinx

3
推荐指数
1
解决办法
2066
查看次数

无法创建迁移phinx

当我尝试创建迁移时,我得到了这个例子,但我的迁移路径中没有大括号

[例外]您可能使用花括号在Phinx配置文件中定义迁移路径,但是没有使用此模式匹配目录.您需要手动创建迁移目录.

我的配置

paths:
migrations: %%PHINX_CONFIG_DIR%%/db/migrations
seeds: %%PHINX_CONFIG_DIR%%/db/seeds

environments:
default_migration_table: phinxlog
default_database: development
production:
    adapter: mysql
    host: localhost
    name: production_db
    user: root
    pass: ''
    port: 3306
    charset: utf8

development:
    adapter: mysql
    host: localhost
    name: development_db
    user: root
    pass: ''
    port: 3306
    charset: utf8

testing:
    adapter: mysql
    host: localhost
    name: testing_db
    user: root
    pass: ''
    port: 3306
    charset: utf8

version_order: creation
Run Code Online (Sandbox Code Playgroud)

php mysql phinx

2
推荐指数
2
解决办法
1888
查看次数

Phinx迁移“向上”与“更改”功能

我已经使用了Phinx迁移,并使用了它的“向上”和“更改”功能,但是我没有注意到它们之间的任何区别。以下是我的迁移文件。

    <?php

use Phinx\Migration\AbstractMigration;

class MediaManager extends AbstractMigration
{

    public function up()
    {
        if($this->hasTable('uss_dish')){
            $dish = $this->table('uss_dish');
            $dish   -> addColumn('coordinates','text',array('after' => 'district_id','default' => NULL))
                    -> save();
        }
    }

    public function change()
    {
        if($this->hasTable('uss_dish')){
            $dish = $this->table('uss_dish');
            $dish   -> addColumn('coordinates','text',array('after' => 'district_id','default' => NULL))
                    -> save();
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

谁能告诉我这两个功能之间的区别?提前致谢。

php sql migration version-control phinx

2
推荐指数
1
解决办法
1360
查看次数

如何在Cakephp 3.3迁移中设置外键约束?

我是Cakephp的新手,并使用Cakephp3.3构建应用程序,我正在进行迁移,我必须创建一个user_infos表,并且想要添加一个新列user_id,我能够通过迁移添加新列但我不知道如何添加外键.

这是我的迁移文件

    public function change()
    {
        $table = $this->table('user_infos');
        $table->addColumn('user_id', 'integer', [
            'default' => null,
            'limit' => 11,
            'null' => false,
        ]);
        $table->addColumn('title', 'string', [
            'default' => null,
            'limit' => 255,
            'null' => false,
        ]);
        $table->addColumn('created', 'datetime', [
            'default' => null,
            'null' => false,
        ]);
        $table->addColumn('modified', 'datetime', [
            'default' => null,
            'null' => false,
        ]);
        $table->create();
    }
Run Code Online (Sandbox Code Playgroud)

mysql cakephp database-migration phinx

1
推荐指数
1
解决办法
2426
查看次数

如何从 Phinx 迁移插入访问自动生成的 ID?

PHP Phinx是 CakePHP 的数据库播种器/迁移库。

这将创建一个假用户,但是我将如何创建一个具有FOREIGN KEY(或常规 ID 引用)到该id新用户(即子用户)的行?

<?php

use Phinx\Seed\AbstractSeed;

class UserSeeder extends AbstractSeed
{
    public function run()
    {
        $faker = Faker\Factory::create();
        $data = [];
        for ($i = 0; $i < 100; $i++) {
            $data[] = [
                'username'      => $faker->userName,
                'password'      => sha1($faker->password),
                'password_salt' => sha1('foo'),
                'email'         => $faker->email,
                'first_name'    => $faker->firstName,
                'last_name'     => $faker->lastName,
                'created'       => date('Y-m-d H:i:s'),
            ];
        }

        $this->insert('users', $data);
    }
}
Run Code Online (Sandbox Code Playgroud)

php cakephp phinx

1
推荐指数
1
解决办法
1713
查看次数