精华内容
参与话题
问答
  • Migration

    2016-12-13 11:00:26
    删除字段或者添加字段php artisan make:migration add_要添加字段column_to表名 –table=表名 composer require doctrine/dbal 如果要删除字段或者是改名字的话要映入这个包

    删除字段或者添加字段

    php artisan make:migration add_要添加字段column_to表名 –(是两个-)table=表名
    composer require doctrine/dbal 如果要删除字段或者是改名字的话要映入这个包

    public function up()
    {
        Schema::table('account_bank_detail', function (Blueprint $table) {
            $table->addColumn('id_card_type');
            //要添加的字段
        });
    }
    
    public function down()
    {
        Schema::table('account_bank_detail', function (Blueprint $table) {
            $table->dropColumn('id_card_type');
            $table->dropColumn('id_card_no');
            //要删除的字段
        });
    }
    展开全文
  • migration

    2012-09-20 16:55:00
    ===========================如何写migration=========================1.migration的结构 每一个migrate的类都是 ActiveRecord::Migration 的子类,每一个migrate都要重写两个方法 up 和 down: Ruby代码...

    =========================== 如何写migration ========================= 


    1.migration的结构

      •  



    每一个migrate的类都是 ActiveRecord::Migration 的子类,每一个migrate都要重写两个方法 up 和 down: 

    Ruby代码 
    1. class CreateProducts < ActiveRecord::Migration   
    2.   def self.up   
    3.      #想干嘛,就干嘛  
    4.    end    
    5.    def self.down   
    6.       #你后悔的时候,你会怎么做?   
    7.     end   
    8. end   


    简单的说 up 方法就是操作数据库时用的,down就是你后悔了,用来回滚用的. 


    2.migration提供调用的方法

      •  



    Migrations提供了一系列的方法来操作数据库: 

    Ruby代码 
    1. create_table  #建表  
    2. change_table  #修改表结构  
    3. drop_table    #删除表  
    4. add_column    #增加字段  
    5. change_column #修改字段定义  
    6. rename_column #修改字段名  
    7. remove_column #删除字段  
    8. add_index     #创建索引  
    9. remove_index  #删除索引  


    具体各个方法的详细定义,可以查看Rails的API http://api.rubyonrails.org/classes/ActiveRecord/Migration.html 
    这些方法替代使用SQL来操作数据库,当然也可以使用 execute 方法直接使用 SQL 来操作数据库,个人不推荐这种方式,但是在某些情况下,提供直接使用SQL也是很方便的: 

    Ruby代码 
    1. execute <<-SQL   
    2. ALTER TABLE products ADD CONSTRAINT fk_products_categories FOREIGN KEY (category_id)  REFERENCES categories(id)    
    3. SQL   




    3.字段

      •  



    定义字段有两种方法: 

    Ruby代码 
    1. #这个是传统的方法  
    2. create_table :products do |t|   
    3. t.column :name:string:null => false   
    4. end   
    5.   
    6. #这个刚出来的时候,大家都说很性感,其实不外乎就是定义一系列的快捷方法: string,  
    7. # text, integer, float, decimal, datetime, timestamp, time, date,  
    8. # binary, boolean . 这一系列的方法对应各种数据类型,  
    9. # 还有 primary_key 方法是用来定义主键的.  
    10. create_table :products do |t|   
    11. t.string :name   
    12. end   


    除了这几个经典的定义字段方法外,还有两个特别的Helper方法: 

    Ruby代码 
    1. #以下这个方法会自动在表中增加 created_at,updated_at这两个类型为timestamp的字段  
    2. change_table :products do |t|   
    3. t.timestamps   
    4. end   
    5.   
    6. #这个方法是定义关于关系的,但是不会为你的表加上外键约束,如果你加上约束,请另外手动添加,切记!  
    7. create_table :products do |t|   
    8. t.references :category # 生成 category_id  
    9.   
    10. #这个是关联关系中多态的定义,生成两个字段 attachment_id 和 attachment_type ,并且attachment_type的默认值为 'Photo'  
    11. t.references :attachment:polymorphic => {:default => 'Photo'}   
    12. end   


    以上两个方法是锦上添花之作,相当的实用. 


    4.在migration中使用 Model

      •  



    除了使用以上方法操作数据库外,其实还可以直接在migration中使用 Model 的.比如: 

    Ruby代码 
    1. def self.up  
    2. #直接就用model来更新数据库,  
    3. #你可以看到 migration 一直在提供便利让你避免使用SQL,当然不是说SQL不好,只是想让你更加的统一,只要ruby就好了.    
    4. User.update_all ["receive_newsletter = ?"true]   
    5. end   



    使用model的另外一种情况是:当前migration要删除表中的一个字段 first_name,但是你的model中的某个方法使用了这个字段作为验证,比如: 

    Ruby代码 
    1. class User < ActiveRecord::Base  
    2.     validates_presence_of :first_name  
    3. end  


    那么当你要在migration中增加一条记录时,这个验证便不能通过,如: 

    Ruby代码 
    1. def self.up   
    2. User.create({:name => 'name'}).save   
    3. end   


    在这种情况下,你可以在migration中重新定义一个model: 

    Ruby代码 
    1. class XXXMigration < ActiveRecord::Migration   
    2. class User < ActiveRecord::Base   
    3. end  
    4. def self.up  
    5. remove_column :first_name  
    6. end  
    7.   
    8. #这个方法的作用就是取得最新的表定义  
    9. User.reset_column_information   
    10. #放心吧,这个User不会有 validates_presence_of :first_name 的验证  
    11. User.create({:name => 'name'}).save  



    =========================== migration文件的命名 ======================= 

    按照Migration的约定去命名你的migration文件,会令你省不少功夫的,请千万要相信这一点. 
    如果migration文件名是这样的格式: AddXXXToYYY” or “RemoveXXXFromYYY 
    XXX => 字段名, YYY => 表名. 
    那么migration生成的时候,Rails会自动为你加上 add_column or remove_column 
    比如: 

    Ruby代码 
    1. #留意类名  
    2. class AddPartNumberToProducts < ActiveRecord::Migration   
    3. def self.up   
    4. add_column :products:part_number:string    
    5. end    
    6. def self.down   
    7. remove_column :products:part_number    
    8. end   
    9. end   
    10.   
    11. class RemovePartNumberFromProducts < ActiveRecord::Migration   
    12. def self.up   
    13. remove_column :products:part_number    
    14. end    
    15. def self.down   
    16. add_column :products:part_number:string    
    17. end   
    18. end   


    cool吧?? 

    =========================== 如何执行migration ========================= 

    执行migration的经典方法: 

    Ruby代码 
    1. rake db:migrate  
    2.   
    3. #执行特定版本  
    4. rake db:migrate VERSION=20080906120000   

    1、创建数据库表格

      在创建Model后,Rails 自动的在/db/migrate文件夹中生成了 迁移编号_create_Model名.rb 格式的文件,如006_create_users.rb

    打开该文件,做如下修改

    	class CreateUsers < ActiveRecord::Migration
    	  def self.up
               #此处加入要创建的表格
               create_table "users"  do |t|
    	      t.column :login,                     :string,  :null => false
    	      t.column :email,                     :string
    	      t.column :crypted_password,          :string, :limit => 40                                   # 字符长度限制
    	      t.column :salt,                      :string, :limit => 40
    	      t.column :created_at,                :datetime
    	      t.column :updated_at,                :datetime
    	      t.column :remember_token,            :string
    	      t.column :remember_token_expires_at, :datetime
                 t.column :flag,                      :boolean,   :null => false, :default => false            #设置默认值
               end
    	  end
    	  def self.down
    	    drop_table "users"
    	  end
    	end
      保存后,运行rake db:migration
      这样就可以在config/database.yml 文件里配置的数据库中创建一个名为:users的数据库表,并且拥有相应的表字段。

    2、修改数据库表格

       如果需要修改之前已经创建好的数据库表,很多人习惯知道用GUI工具到数据库中直接做删除数据表、增加数据表字段、删除数据表字段以及修改一些字段的属性设置。
    当然这样做的效果是一样的,但是假如有那么一天我们所编写的程序因为之前对数据库进行了修改而产生了严重的BUG,我们必须将它修改回来,但是我们现在又忘记了原来的数据表的设置,那么这样就麻烦了。但是如果我们能够记录我们对数据库的每个操作,那么我们想回到哪个数据库版本都可以做到。
    这里做一个例子了说明:
      (1)、删除数据库表,并重建一个新的数据库表
    	class ChangeAttachment < ActiveRecord::Migration
    	  def self.up
    	    drop_table :attachments                   # 删除数据库表
    	    create_table :attachments do |t|
    	      t.column "owner_id", :integer, :null => false
    	      t.column "owner_model", :string, :default => "", :null => false
    	      t.column "type", :string, :default => "", :null => false
    	      t.column "filepath", :string, :default => "", :null => false
    	      t.column "filename", :string, :default => "", :null => false
    	      t.column "type_flag", :string
    	      t.column "enable", :boolean, :default => true, :null => false
    	    end
    	  end
    	  def self.down
    	  end
    	end
      (2)、增加索引
         class AddColumnAndIndex < ActiveRecord::Migration
    	  def self.up
    	    add_index :systems,:client_id
    	    add_index :systems,:scale_length
    	    add_index :systems,:development_start_on
    	  end
    	  def self.down
    	    remove_index :systems,:client_id
    	    remove_index :systems,:scale_length
    	    remove_index :systems,:development_start_on
    	  end
    	end
        (3)、增加数据表字段
           class AddColumnToHolidayrecord < ActiveRecord::Migration
    	  def self.up
    	    add_column :holiday_records, :revert_flag, :boolean, :null => false, :default => false
    	  end
    	  def self.down
    	    remove_column :holiday_records, :revert_flag
    	  end
           end
         (4)、修改字段属性
    	class ChangeUserColumns < ActiveRecord::Migration
    	  def self.up
    	    change_column :users, :birthday,              :date
    	    change_column :users, :graduated_at,          :date
    	    change_column :users, :dimission_at,          :date
    	  end
    	  def self.down
    	    change_column :users, :birthday,              :datetime
    	    change_column :users, :graduated_at,          :datetime
    	    change_column :users, :dimission_at,          :datetime
    	  end
    	end
      注意在上面例子中的关键字如:create_table,drop_table,add_index等等,这些方法决定了数据迁移将进行何种操作。

    3、数据预先导入数据库

     有些数据在项目移交后需要在数据库中生成基本一些数据,比如说一些地名,一些不变的数据,还有一些项目的初始数据。
    因为作为开发人员项目移交后我们不能把自己的数据库给用户,只能是用户创建好数据库后用数据迁移创建所需的数据表。
    但是那时数据库中没有任何数据,所以可以用数据迁移将我们所要的数据加入到数据库当中。比如下面的例子。
    	#初始数据
           class CreateStateDatas < ActiveRecord::Migration
    	  def self.up
    	    State.create(:name=>'北海道')
    	    State.create(:name=>'青森県')
    	    State.create(:name=>'岩手県')
    	    State.create(:name=>'宮城県')
    	    State.create(:name=>'秋田県')
    	    State.create(:name=>'山形県')
    	    State.create(:name=>'福島県')
    	    State.create(:name=>'茨城県')
    	    State.create(:name=>'栃木県')
    	  end
    	  def self.down
    	  end
    	end
           #批量修改数据
    	class ChangeUserNameFulltext < ActiveRecord::Migration
    	  def self.up
    	    users = User.find(:all)
    	    for user in users
    	      unless user.valid?
    	        user.name = "ユーザ名全角文字"
    	        user.save!
    	      end
    	    end
    	  end
    	  def self.down
    	  end
    	end

    4、处理一些与数据库无关的操作

      migration不仅仅可以做与数据库有关的各种操作,同样可以做些其他的操作,只是我们习惯用数据迁移来对数据库版本进行控制。
    这个方法我们不常用,如果需要用到我们可以写到self.up当中,而在self.down中写一个相反的操作代码。

    5、migration的工作原理

    有些人可能对migration的工作原理不了解。这里我简单的说明一下。
    每个迁移任务都有自己的编号,编号从1开始,后续的每个新的任务都会得到在原基础上加1的编号。Rails会记住最近一次作于数据库的 迁移任务编号,登记到/db/schema.rb中
    当你要求使用新的迁移任务来更新数据库结构,它会将所有可用的迁移编号与当前的数据库结构编号进行比较。只要找到编号比Rails所登记的最大编号还大的迁移任务,
    rake将运行该任务。这里要注意的是Rails只关注编号,而不关注你给迁移任务所取的任务名。

    (1)、创建和运行迁移任务

      命令:rake db:migration

    (2)、回退到某个迁移任务版本

      命令:rake db:migration version=10          这里是将迁移任务的版本回到10,注意version、= 、数字之间没有空格

    (3)、解析迁移任务

      每个迁移任务中都有up方法和down方法,如下
    	class ChangeUserNameFulltext < ActiveRecord::Migration
    	  def self.up
    	  end
    	  def self.down
    	  end
    	end
      其中up()方法负责修改数据库,down()负责撤销这些修改,对应的编号管理中up()方法是从小到大的顺序执行,而down()则是由大到小的顺序执行。

    转载于:https://www.cnblogs.com/mingforyou/archive/2012/09/20/2695488.html

    展开全文
  • Live Migration

    2020-11-26 01:17:28
    <p>vm-live-migration crate abstracts the components used for live migration, provides the interfaces to control the live migration and defines the flows of live migration. <p>The upper layer which can...
  • Migration 12.0

    2020-12-25 19:06:33
    2019-02-28 19:31:09,964 15107 ERROR AP_1_copy odoo.modules.migration: module base: Each pre-migration file must have a "migrate(cr, installed_version)" function 2019-02-28 19:31:09,966 15107 ...
  • <div><p>removes legacy migration from background script. places it in migration path. cc </p><p>该提问来源于开源项目:EFForg/privacybadger</p></div>
  • <div><p>How to do migration on multiple databases from a single environment ? eg: below given are multiple database name customer1_application customer2_application customer3_application customer4_...
  • <div><p>At the end of the migration tool run I got: <pre><code> [1/2] 🌀 Converting Package... Out directory: /home/vaadin/tmp/spring-secured-vaadin/target/migration Unhandled Rejection at: ...
  • Migration improvements

    2020-12-02 16:34:35
    <div><p>If a migration fails for any reason, and is tried again, we had a pretty good chance that subsequent migration would fail as well. The issue occurred when the migration retry target pod lands ...
  • Seismic Migration

    2020-12-09 03:13:27
    <ul><li>Stolt migration</li><li>Gazdag migration</li><li>Kirchhoff time migration</li><li>Finite-difference migration</li></ul> <h2>Depth Migration <ul><li>Wave-equation migration</li><li>Kirchhoff ...
  • nc 12.0.7).</li><li>Passwords legacy app in oC 9.1.8 is version 20-beta9</li><li>nc10 and 11 have no password app installed in the migration path</li><li>After going through this in nc 12.0.7 install...
  • Migration helpers

    2021-01-10 12:50:14
    <div><p>1: <code>yarn run generate:migration (desired migration number)</code> will create your migration files and cp over the templates because i dont like doing it manually (run this from root of ...
  • Migration APIs

    2020-11-22 14:45:04
    Once a migration item is created, we can invoke a test migrate and cleanup on it, or a migrate and complete migration on it, to confirm that the migration is completed. The migration item can be ...
  • Migration tool

    2021-01-09 14:19:52
    <div><p>This adds a basic migration tool (#111) <code>boulder-migrator</code> (in <code>boulder/cmd/boulder-migrator/main.go) that can be used to apply migrations, revert the last migration, revert to...
  • Migration issue

    2021-01-03 07:47:21
    <div><p>Hi Seems we have an issue with class name generated due to migration step for sail configuration settings. <p>When we run the step <code>rails g sail my_desired_migration_name</code> and let&#...
  • Just updating to version 9 creates a lot of compile errors and I have no idea where to start with the migration. <p><strong>Describe the solution you'd like A guide or schematics on how to switch...
  • Migration documentation

    2020-12-27 07:52:19
    <div><p>Hello, <p>The migration pages (from <code>spomky-labs-jose</code> to <code>web-token/jwt-framework) give a 404 : <p>https://web-token.spomky-labs.com/migration/spomky-labs-jose ...
  • migration</code> generates migration file with timestamp prefix of when it was first created (should be around the time this package was made public). <p>Running it again should not create new file ...
  • <div><p>The migration prechecks of the model, source controller and target controller are now also run inside the InitiateMigration API handler. This provides the earliest possible feedback to the ...
  • Migration framework

    2020-11-30 10:57:45
    class MyMigration(Migration): "Remove archivemount because we don't use it anymore" def forward(self): subprocess.check_call("apt-get remove archivemount -y", shell=True) ...
  • Migration notes

    2020-12-26 10:57:35
    <div><p>Thank you for your efforts, but I would like to push migration notes when you do breaking changes, last updates contains breaking changes and I'm just wasting time to know what the changes...
  • Migration queue

    2020-12-30 05:57:26
    migration queue'. My common task is to move all VMs out of the server to install patches, add RAM, move hardware itself. I spend lof of time checking if I can start migration of next VM.</p><p>该...
  • Migration Feedback

    2020-12-25 22:26:29
    s missing in the migration process from my point of view. Thanks for your great work! <p>In step 3 of the migration guide, I see no mention of Codelyzer and if I can remove it from the dependencies. ...
  • EF Migration

    2021-01-08 01:52:08
    how do you create migration with dynamically add models from each module? i tried, bud it's didn't work. <p>and how about migration it each module, do you have any idea? <p>thanks</p><p>该提问...
  • Migration dependencies

    2020-12-26 16:13:59
    So you put migration which adds constraint between these entities. But then for some reason table of ABundleEntity is renamed. If you'll create new installation, migrations from bundle B will be ...
  • database migration

    2021-01-04 00:10:44
    enable-migration -force; add-migration xxx; update-database xxx;" in the Package Manager Console, it did nothing. thanks for any replys! </code></pre>该提问来源于开源项目:smartstore/...

空空如也

1 2 3 4 5 ... 20
收藏数 44,050
精华内容 17,620
关键字:

migration