我想在CakePHP 3中的现有表中添加列.
我的ContactsTable.php文件代码:
<?php
namespace App\Model\Table;
use Cake\ORM\Table;
use Migrations\AbstractMigration;
class ContactsTable extends Table
{
public function initialize(array $config)
{
$this->addBehavior('Timestamp');
$table = $this->table('contacts');
$table->addColumn('price', 'decimal')->update();
}
}
Run Code Online (Sandbox Code Playgroud)
我已经按照CakePHP 3文档中的描述尝试了但是我收到了这个错误:
在非对象上调用成员函数addColumn()
如何通过控制器即时添加列?
我会简短的说:
我有一个安装了作曲家的TYPO3.
让我们看一下TYPO3的require部分.
"require": {
"php": ">=5.5.0",
"ext-fileinfo": "*",
"ext-json": "*",
"ext-pcre": "*",
"ext-session": "*",
"ext-xml": "*",
"psr/log": "1.0.*@dev",
"pear/http_request2": "~2.2.1",
"swiftmailer/swiftmailer": "~5.4.1",
"symfony/console": "~2.7.0",
"symfony/finder": "~2.7.0",
"doctrine/instantiator": "~1.0.4",
"typo3/class-alias-loader": "^1.0",
"typo3/cms-composer-installers": "^1.2.8",
"psr/http-message": "~1.0",
"cogpowered/finediff": "~0.3.1",
"mso/idna-convert": "^0.9.1"
}
Run Code Online (Sandbox Code Playgroud)
正如您所见,TYPO3需要"symfony/console":"~2.7.0",这意味着:(> = 2.7 <= 2.8)
在它旁边,我使用自定义CakePHP Part的迁移插件运行CakePHP.
我们来看看数据库迁移插件中的require部分:
"require": {
"php": ">=5.4",
"robmorgan/phinx": "0.5.3",
"cakephp/cakephp": "~3.1"
},
Run Code Online (Sandbox Code Playgroud)
第一眼看上去没有错,但让我们详细一点,仔细看看"robmorgan/phinx":"0.5.3".这个插件需要以下包,再次让我们仔细看看"phinx"中的composer.json.
"require": {
"php": ">=5.4",
"symfony/console": "~2.8|~3.0",
"symfony/config": "~2.8|~3.0",
"symfony/yaml": "~2.8|~3.0"
}
Run Code Online (Sandbox Code Playgroud)
现在你可以看到这个包需要至少2.8的"symfony/console",但它不起作用,因为TYPO3在"~2.7.0"中需要它,这意味着:(> = 2.7 <= 2.8).
我想出了这个问题,但我不知道如何解决它.我只有一个解决方案,但它不是很好,它正在分析TYPO3并编辑composer.json.但这是最后一种选择.
有没有其他人有一个如何解决这个问题的好方法?
我刚刚开始学习Phinx,我需要将列的排序规则更改为latin1_swedish_ci.我没有找到有关如何执行此操作的文档.我假设它类似于:
->addColumn('text_two', 'string', ['collation' => 'latin1_swedish_ci'])
Run Code Online (Sandbox Code Playgroud)
但是,我已经看到一些关于此功能尚未实现的说法.https://github.com/robmorgan/phinx/issues/661
如果有人有办法解决这个问题,那就太好了!
我想同步多个数据库的状态。我想比较其中的表,并创建缺少的表和列。
Php 有一个库,它有很多数据库操作的函数:Phinx不幸的是,只有创建迁移的例子,但它没有解释,如何在没有它的情况下使用它。
如何在不编写迁移的情况下查询和修改数据库结构?
我在客户端和服务器端JavaScript应用程序开发方面有一些经验.但现在我在php上设计我的第一个Web应用程序并寻找最佳的开发工具堆栈.我使用phinx在测试,开发和生产环境之间共享我的数据库结构.我将使用codeception进行数据库操作测试.
问题是代码期望我将表创建sql命令放入tests/_data/dump.sql并删除我在phinx迁移文件中创建的所有表.我可以设置cleanup: false在codeception.yml,但我将不得不在这种情况下,每个测试之前清理数据库表.我不知道怎么做.在代码中的每次测试之前,我没有发现手动清理db的能力.
我如何获得代码和phinx协调?
PS:我发现有关在代码中使用迁移的讨论,似乎并不是每个人都能看到它的好处.
我正在尝试在Phinx中创建一个迁移(实际上是一个回滚),它将在MySQL DB中创建一个枚举类型字段.阅读完文档后,我觉得这应该很简单,但每次都失败了.
$table = $this->table('mytable');
$table->addColumn('warmth','enum', array('limit' => array('1', '2', '3', '4', '5', 'P', 'A', 'B', 'C', 'D', 'X', 'N')))
->save();
Run Code Online (Sandbox Code Playgroud)
不幸的是,没有简单的方法让Phinx输出有问题的SQL查询.
我在迁移过程中使用可能包含特殊字符的字符串进行了一些简单的更新.例如:
$this->execute("UPDATE `setting` SET `classname` = 'org\foo\Bar' WHERE `id` = 1 ");
Run Code Online (Sandbox Code Playgroud)
例如,org\foo\Bar插入MySQL时的问题\就像转义字符一样.对于每个数据库phinx支持,我确定需要在字符串中处理特殊字符,PDO直接使用时,您可以使用预处理语句和绑定参数.
是否有任何本地方式phinx来逃避字符串或我是否需要依靠类似的东西PDO::quote()?
我知道有几篇与此类似的帖子,但他们没有给我我需要的答案。因此,我正在使用 Phinx 并尝试添加外键,但出现以下错误:
General error: 1215 Cannot add foreign key constraint
Run Code Online (Sandbox Code Playgroud)
这是带有外键的 php 文件:
<?php
use Phinx\Migration\AbstractMigration;
class CustomQuotes extends AbstractMigration
{
/**
* Change Method.
*
* Write your reversible migrations using this method.
*
* More information on writing migrations is available here:
* http://docs.phinx.org/en/latest/migrations.html#the-abstractmigration-class
*
* The following commands can be used in this method and Phinx will
* automatically reverse them when rolling back:
*
* createTable
* renameTable
* addColumn
* renameColumn
* addIndex
* …Run Code Online (Sandbox Code Playgroud) 我有个问题;
有没有人有使用 CakePHP 3 迁移工具迁移表的经验,当特定字段是ENUM数据类型时,迁移脚本会自动将其转换为字符串或文本。
如何避免它以及如何维护数据类型ENUM?
谢谢
我正在 Cakephp3 中进行迁移,我想回滚特定的迁移,我知道如何使用以下方式回滚以前的迁移:
bin/cake migrations rollback
Run Code Online (Sandbox Code Playgroud)
但是我找不到回滚特定迁移的方法。
注意:我正在使用phinx插件进行数据库迁移。