我试图找出如何使用CakePHP Migrations插件最好地修改MySQL Table的现有列.我不需要添加或删除列,我只想修改字符串列的长度.
目前该列被定义为varchar(50); 我正在重新调整列,并希望将其定义为varchar(2000).
迁移的目标是成为典型Web服务器上标准CakePHP Web应用程序安装的自动部署的一部分.
我可以说,看起来ALTER使用迁移插件实现此目的的唯一方法(除了语句之外)将是:
也许我错过了文档和无数教程中的讨论以及如何以更好的方式实现这一目标,但这似乎是一种麻烦且自我挫败的方法.
我已经完成了CakePHP Migration Plugin的文档和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) 我正在尝试在 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。:/
我在初始化期间使用 --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) 当我尝试创建迁移时,我得到了这个例子,但我的迁移路径中没有大括号
[例外]您可能使用花括号在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) 我已经使用了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)
谁能告诉我这两个功能之间的区别?提前致谢。
我是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) 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)