假设我们添加了一系列迁移附带的第三方模块,其中一个迁移会创建一个post
表。如果我们想要修改此表怎么办?我们可能想要添加另一列,或者添加外键并将其链接到我们项目的现有表之一。如果根据模块附带的迁移名称(按时间戳)修复订单,我们如何确保所有迁移始终以正确的顺序发生?
答案 0 :(得分:0)
创建一个扩展原始模块的模块(或使用你需要的coede创建一个重复的模块)
在你的模块中
namespace app\modules\yourVendorName ;
class Module extends \vendor\originalvendorname\modelname
{
public function init()
{
parent::init();
$this->params['foo'] = 'bar';
// ... other initialization code ...
}
}
app / config 中的
<?php
return [
'components' => [
'your_module_name' => [
// list of component element configurations
],
],
'params' => [
// list of parameters
],
];
您可以根据需要轻松更改或添加迁移
答案 1 :(得分:0)
好的,所以这是我的解决方案。让我们来看一个通用的#34;论坛&#34;以模块为例。
申请&#34;论坛&#34;模块迁移我们可以做以下两件事之一:
运行./yii migrate --migrationPath=@app/modules/forum/migrations
。这将仅应用该文件夹中的迁移。它不会复制,也不会重命名。这意味着即使运行migrate/redo
也会失败,因为yii会希望迁移位于主项目的迁移路径中。
为了解决上述问题,Yii2开发人员实施了migration namespaces。我们可以做的是将模块的迁移命名空间添加到我们的应用程序配置中,然后运行./yii migrate
。这样更好,但仍有缺陷。我们仍然无法修改模块的迁移,因为我们无法控制确定执行顺序的名称!
如果我们想修改迁移,上述两种方法都无效。您可以这样做:
在项目中创建一个新的空迁移,但不要从yii\db\Migration
延伸。相反,从模块中定义的迁移扩展它。对模块中包含的每个迁移文件执行此操作。通过这种方式,您可以完全控制执行顺序(您可以为其指定任何名称),甚至可以通过覆盖up()
/ down()
方法来修改这些迁移。
欢迎更好的想法/改进!