<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                [TOC] # 數據庫遷移 遷移是一種以結構化和有組織的方式更改數據庫的便捷方式。 >[danger] Phalcon開發者工具中提供了遷移您至少需要Phalcon Framework 0.5.0才能使用開發人員工具。 通常在開發中,我們需要更新生產環境中的更改。其中一些更改可能是數據庫修改,如新字段,新表,刪除索引等。 生成遷移時,會創建一組類來描述在特定時刻數據庫的結構。這些類可用于同步遠程數據庫上的模式結構,使您的數據庫可以使用應用程序實現的新更改。遷移使用普通PHP描述這些轉換。 ## 架構轉儲 [Phalcon開發者工具](https://github.com/phalcon/docs/blob/3.3/zh/devtools-usage.md) 提供了用于管理遷移(生成,運行和回滾)的腳本。 用于生成遷移的可用選項包括: ![](https://docs.phalconphp.com/images/content/migrations-1.png) 在沒有任何參數的情況下運行此腳本只會將數據庫中的每個對象(表和視圖)轉儲到遷移類中。 每個遷移都有一個與之關聯的版本標識符。版本號允許我們確定遷移是否比我們數據庫的當前“版本”更新或更舊。版本還將在執行遷移時通知Phalcon正在運行的訂單。 ![](https://docs.phalconphp.com/images/content/migrations-2.png) 生成遷移時,控制臺上會顯示說明,以描述遷移的不同步驟和這些語句的執行時間。最后,生成遷移版本。 默認情況下,Phalcon開發者工具使用`app/migrations`目錄轉儲遷移文件。您可以通過在生成腳本上設置其中一個參數來更改位置。數據庫中的每個表都在一個分隔文件中生成其各自的類,該文件位于引用其版本的目錄下: ![](https://docs.phalconphp.com/images/images/content/migrations-2.png) ## 遷移類解剖 每個文件都包含一個擴展`Phalcon\Mvc\Model\Migration`類的唯一類。這些類通常有兩種方法:`up()`和`down()`。`up()`執行遷移,而`down()`將其回滾。 `up()` 還包含magic方法`morphTable()`。當它識別出將數據庫中的實際表與給定描述同步所需的更改時,就會產生魔術方法。 ```php <?php use Phalcon\Db\Column as Column; use Phalcon\Db\Index as Index; use Phalcon\Db\Reference as Reference; use Phalcon\Mvc\Model\Migration; class ProductsMigration_100 extends Migration { public function up() { $this->morphTable( 'products', [ 'columns' => [ new Column( 'id', [ 'type' => Column::TYPE_INTEGER, 'size' => 10, 'unsigned' => true, 'notNull' => true, 'autoIncrement' => true, 'first' => true, ] ), new Column( 'product_types_id', [ 'type' => Column::TYPE_INTEGER, 'size' => 10, 'unsigned' => true, 'notNull' => true, 'after' => 'id', ] ), new Column( 'name', [ 'type' => Column::TYPE_VARCHAR, 'size' => 70, 'notNull' => true, 'after' => 'product_types_id', ] ), new Column( 'price', [ 'type' => Column::TYPE_DECIMAL, 'size' => 16, 'scale' => 2, 'notNull' => true, 'after' => 'name', ] ), ], 'indexes' => [ new Index( 'PRIMARY', [ 'id', ] ), new Index( 'product_types_id', [ 'product_types_id', ] ), ], 'references' => [ new Reference( 'products_ibfk_1', [ 'referencedSchema' => 'invo', 'referencedTable' => 'product_types', 'columns' => ['product_types_id'], 'referencedColumns' => ['id'], ] ), ], 'options' => [ 'TABLE_TYPE' => 'BASE TABLE', 'ENGINE' => 'InnoDB', 'TABLE_COLLATION' => 'utf8_general_ci', ], ] ); } } ``` 該類稱為`ProductsMigration_100`。后綴100指的是版本1.0.0。`morphTable()` 接收一個包含4個可能部分的關聯數組: | Index | 描述 | 是否可選 | | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------- |:--------:| | `columns` | 帶有一組表列的數組 | No | | `indexes` | 包含一組表索引的數組。 | Yes | | `references` |帶有一組表引用(外鍵)的數組。 | Yes | | `options` | 包含一組表創建選項的數組。這些選項通常與生成遷移的數據庫系統相關。| Yes | ### 列定義 `Phalcon\Db\Column` 用于定義表列。它封裝了各種與列相關的功能。它的構造函數接收列名稱和描述列的數組作為第一個參數。描述列時可以使用以下選項: | 選項 | 描述 | 是否可選 | | --------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |:--------:| | `type` | 列類型。必須是`Phalcon\Db\Column` 常量(見下文) | No | | `size` | 某些類型的列(如`VARCHAR`或`INTEGER`)可能具有特定大小 | Yes | | `scale` | `DECIMAL` 或 `NUMBER` 列可以有一個比例來指定它必須存儲多少小數 | Yes | | `unsigned` | `INTEGER` 列可以是有符號或無符號的。此選項不適用于其他類型的列 | Yes | | `notNull` | 列可以存儲 null 值嗎? | Yes | | `default` | 定義列的默認值(只能是實際值,而不是 `NOW()`等函數)) | Yes | | `autoIncrement` | 使用此屬性列將自動填充自動增量整數。表中只有一列可以具有此屬性。| Yes | | `primary` | 使用`columnName_pkey` 作為標識符將此列設置為主鍵索引。類型 - `BOOLEAN` | Yes | | `first` | 列必須按列順序放置在第一個位置 | Yes | | `after` | 必須在指定的列之后放置 | Yes | 數據庫遷移支持以下數據庫列類型: * `Phalcon\Db\Column::TYPE_INTEGER` * `Phalcon\Db\Column::TYPE_VARCHAR` * `Phalcon\Db\Column::TYPE_CHAR` * `Phalcon\Db\Column::TYPE_DATE` * `Phalcon\Db\Column::TYPE_DATETIME` * `Phalcon\Db\Column::TYPE_TIMESTAMP` * `Phalcon\Db\Column::TYPE_DECIMAL` * `Phalcon\Db\Column::TYPE_TEXT` * `Phalcon\Db\Column::TYPE_BOOLEAN` * `Phalcon\Db\Column::TYPE_FLOAT` * `Phalcon\Db\Column::TYPE_DOUBLE` * `Phalcon\Db\Column::TYPE_TINYBLOB` * `Phalcon\Db\Column::TYPE_BLOB` * `Phalcon\Db\Column::TYPE_MEDIUMBLOB` * `Phalcon\Db\Column::TYPE_LONGBLOB` * `Phalcon\Db\Column::TYPE_JSON` * `Phalcon\Db\Column::TYPE_JSONB` * `Phalcon\Db\Column::TYPE_BIGINTEGER` ### 索引定義 `Phalcon\Db\Index` 定義表索引。索引僅要求您為其定義名稱及其列的列表。請注意,如果任何索引的名稱為`PRIMARY`,Phalcon將為該表創建主鍵索引。 ### 引用定義 `Phalcon\Db\Reference` 定義表引用(也稱為外鍵)。以下選項可用于定義引用: | Index | 描述 | 是否可選 | 作用于 | | ------------------- | --------------------------------------------------------------------------------------------------- |:--------:| ---------------- | | `referencedTable` | 它是自動描述性的。它指的是引用表的名稱。 | No | All | | `columns` | 一個數組,其中包含表中具有引用的列的名稱| No | All | | `referencedColumns` | 一個數組,其中包含引用表中列的名稱 | No | All | | `referencedSchema` | 引用的表可能在另一個模式或數據庫上。此選項允許您定義它。 | Yes | All | | `onDelete` | 如果刪除了外部記錄,請在本地記錄上執行此操作。 | Yes | MySQL PostgreSQL | | `onUpdate` | 如果更新了外部記錄,請對本地記錄執行此操作。 | Yes | MySQL PostgreSQL | ## 編寫遷移 遷移不僅設計為“變形”表。遷移只是一個常規的PHP類,因此您不僅限于這些函數。例如,在添加列之后,您可以編寫代碼來為現有記錄設置該列的值。有關各個方法的更多詳細信息和示例,請檢查數據庫組件。 ```php <?php use Phalcon\Mvc\Model\Migration; class ProductsMigration_100 extends Migration { public function up() { // ... self::$_connection->insert( 'products', [ 'Malabar spinach', 14.50, ], [ 'name', 'price', ] ); } } ``` ## 運行遷移 生成的遷移在目標服務器上上傳后,您可以輕松運行它們,如以下示例所示: ![](https://docs.phalconphp.com/images/content/migrations-4.png) ![](https://docs.phalconphp.com/images/content/migrations-5.png) 根據數據庫在遷移方面的過時程度,Phalcon可能會在同一遷移過程中運行多個遷移版本。如果指定目標版本,Phalcon將運行所需的遷移,直到達到指定的版本。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看