マイグレーション

<div class="container docs-content

移行は、Rubyを経由してデータベーススキーマを管理できるようにする機能です。彼らはいくつか付属してコマンドライン施設データベース操作を実行したりすることができます生成の移行を。

私たちのアプリケーションが使用している場合、移行にのみ使用可能ですSQLアダプタを

移動の解剖学

移行は下にデフォルトで保存されたRubyファイルですdb/migrations彼らの名前は、UTCタイムスタンプと蛇ケース名(例えばによって構成されていますdb/migrations/20150621165604_create_books.rb)。

Hanami::Model.migration do
  change do
    create_table :books do
      primary_key :id
      foreign_key :author_id, :authors, on_delete: :cascade, null: false

      column :code,  String,  null: false, unique: true, size: 128
      column :title, String,  null: false
      column :price, Integer, null: false, default: 100 # cents

      check { price > 0 }
    end
  end
end

私たちは、使用しcreate_tableているテーブルのスキーマを定義するブロックを。

最初の行は、primary_key :idオートインクリメント整数列を作成するためのショートカットです。

カスケード削除と外部キーの定義があります。最初の引数はローカル列(の名前であるbooks.author_id第二の参照テーブルです)。

その後、我々は列のための3つのラインを持っています。我々はに渡す最初の引数は#column名前、そしてタイプです。タイプとすることができるルビータイプなどString、またはInteger表す文字列またはネイティブデータベースタイプ(例えば、"varchar(32)"または"text[]")。

最後のオプションの引数として列のいくつかの余分な詳細を指定ハッシュがあります。例えばNULLまたは一意性制約、(文字列の)サイズまたはデフォルト値。

最後の行は、データベースの定義のチェックをその価格は常にゼロよりも大きくなります保証するために。

上下

我々はに入っているデータベース「移行」すると「アップ」我々はそれに変更を追加しているので、方向を。移行修飾は(ロールバックすることができる「下」方向)。

私たちが使用した場合change、当社の移行では、我々は、暗黙的に記述している「アップ」の修正。彼らのカウンターパートは、によって推測することができHanami::Model、我々は移行時に「ダウン」当社のデータベース。

私たちは、次のコードを持っている想像してみて:

Hanami::Model.migration do
  change do
    create_table :books do
      # ...
    end
  end
end

私たちが使用している場合create_table、花見::モデルが使用されますdrop_table、我々は、この移行をロールバックしたい場合に。

ケースでは、私たちのための具体的なコードを持つようにしたい「ダウン」政策を、私たちが使用することができますupし、downブロックします。

Hanami::Model.migration do
  up do
    create_table :books do
      # ...
    end
  end

  down do
    drop_table :books
  end
end

コマンドラインでの移行を使用する方法については、見ていてくださいこの記事を

リファレンス

花見::モデルが使用続編をデータベース移行エンジンとしてボンネットの下に。私たちのドキュメントやテストでカバーされていない任意の側面がある場合は、を参照してください続編のドキュメント