Không thể tìm thấy quá trình di chuyển Plugin CakePHP

は?cakephp急にデプロイできなくなった。
Exception. Không thể tìm thấy Di chuyển plugin. trong [/var/www/application/stag-active/releases/235/vendor/cakephp/cakephp/src/Core/PluginCollection. php, line 137]
どゆこと??
勝手に壊れた。

— ニズベール [@44uk_i3] November 16, 2020

Di chuyển là một plugin được hỗ trợ bởi nhóm cốt lõi giúp bạn thực hiện các thay đổi lược đồ trong cơ sở dữ liệu của mình bằng cách ghi các tệp PHP có thể được theo dõi bằng hệ thống kiểm soát phiên bản của bạn

Nó cho phép bạn phát triển các bảng cơ sở dữ liệu của mình theo thời gian. Thay vì viết các sửa đổi lược đồ trong SQL, plugin này cho phép bạn sử dụng một bộ phương pháp trực quan để thực hiện các thay đổi cơ sở dữ liệu của mình

Plugin này là trình bao bọc cho thư viện di chuyển cơ sở dữ liệu Phinx

Cài đặt

Theo mặc định, Di chuyển được cài đặt với khung ứng dụng mặc định. Nếu bạn đã gỡ bỏ nó và muốn cài đặt lại nó, bạn có thể làm như vậy bằng cách chạy đoạn mã sau từ thư mục ROOT của ứng dụng [nơi trình soạn thảo. json được đặt]

php composer.phar require cakephp/migrations "@stable"

# Or if composer is installed globally
composer require cakephp/migrations "@stable"

Để sử dụng plugin, bạn cần tải nó trong config/bootstrap của ứng dụng. tập tin php. Bạn có thể sử dụng shell Plugin của CakePHP để tải và hủy tải các plugin từ cấu hình/bootstrap của mình. php

bin/cake plugin load Migrations

Hoặc bạn có thể tải plugin bằng cách chỉnh sửa src/Application của mình. php và thêm câu lệnh sau

$this->addPlugin['Migrations'];

// Prior to 3.6.0 you need to use Plugin::load[]

Ngoài ra, bạn sẽ cần định cấu hình cấu hình cơ sở dữ liệu mặc định cho ứng dụng của mình trong tệp config/app. php như được giải thích trong

Tổng quan

Di chuyển về cơ bản là một tệp PHP duy nhất mô tả các thay đổi để vận hành cơ sở dữ liệu. Tệp di chuyển có thể tạo hoặc xóa bảng, thêm hoặc xóa cột, tạo chỉ mục và thậm chí chèn dữ liệu vào cơ sở dữ liệu của bạn

Đây là một ví dụ về di chuyển

table['products'];
        $table->addColumn['name', 'string', [
            'default' => null,
            'limit' => 255,
            'null' => false,
        ]];
        $table->addColumn['description', 'text', [
            'default' => null,
            'null' => false,
        ]];
        $table->addColumn['created', 'datetime', [
            'default' => null,
            'null' => false,
        ]];
        $table->addColumn['modified', 'datetime', [
            'default' => null,
            'null' => false,
        ]];
        $table->create[];
    }
}

Quá trình di chuyển này sẽ thêm một bảng vào cơ sở dữ liệu của bạn có tên là

bin/cake migrations rollback
8 với các định nghĩa cột sau

  • Cột

    bin/cake migrations rollback
    
    9 loại
    bin/cake bake migration CreateProducts name:string description:text created modified
    
    0 làm khóa chính

  • bin/cake bake migration CreateProducts name:string description:text created modified
    
    1 cột loại
    bin/cake bake migration CreateProducts name:string description:text created modified
    
    2

  • bin/cake bake migration CreateProducts name:string description:text created modified
    
    3 cột loại
    bin/cake bake migration CreateProducts name:string description:text created modified
    
    4

  • bin/cake bake migration CreateProducts name:string description:text created modified
    
    5 cột loại
    bin/cake bake migration CreateProducts name:string description:text created modified
    
    6

  • bin/cake bake migration CreateProducts name:string description:text created modified
    
    7 cột loại
    bin/cake bake migration CreateProducts name:string description:text created modified
    
    6

Mẹo

Cột khóa chính có tên

bin/cake migrations rollback
9 sẽ được thêm ngầm

Ghi chú

Lưu ý rằng tệp này mô tả cơ sở dữ liệu sẽ trông như thế nào sau khi áp dụng quá trình di chuyển. Tại thời điểm này, không có bảng

bin/cake migrations rollback
8 nào tồn tại trong cơ sở dữ liệu của bạn, chúng tôi chỉ tạo một tệp có thể vừa tạo bảng
bin/cake migrations rollback
8 với các cột được chỉ định cũng như loại bỏ nó khi thực hiện thao tác di chuyển
bin/cake plugin load Migrations
82

Khi tệp đã được tạo trong thư mục config/Migrations, bạn sẽ có thể thực thi lệnh

bin/cake plugin load Migrations
83 sau để tạo bảng trong cơ sở dữ liệu của mình

$this->addPlugin['Migrations'];

// Prior to 3.6.0 you need to use Plugin::load[]
0

Lệnh

bin/cake plugin load Migrations
83 sau đây sẽ thực hiện một
bin/cake plugin load Migrations
82 và xóa bảng khỏi cơ sở dữ liệu của bạn

bin/cake migrations rollback

Tạo di chuyển

Các tệp di chuyển được lưu trữ trong thư mục config/Migrations của ứng dụng của bạn. Tên của tệp di chuyển có tiền tố là ngày tạo tệp, ở định dạng YYYYMMDDHHMMSS_MigrationName. php. Dưới đây là ví dụ về tên tệp di chuyển

  • 20160121163850_CreateSản phẩm. php

  • 20160210133047_AddRatingToProducts. php

Cách dễ nhất để tạo tệp di chuyển là sử dụng lệnh

bin/cake plugin load Migrations
86 CLI

Vui lòng đảm bảo rằng bạn đã đọc tài liệu chính thức của Phinx để biết danh sách đầy đủ các phương pháp bạn có thể sử dụng để ghi tệp di chuyển

Ghi chú

Khi sử dụng tùy chọn

bin/cake plugin load Migrations
87, bạn vẫn có thể sửa đổi quá trình di chuyển trước khi chạy chúng nếu muốn

cú pháp

Cú pháp lệnh

bin/cake plugin load Migrations
87 theo mẫu bên dưới

bin/cake bake migration CreateProducts name:string description:text created modified

Khi sử dụng

bin/cake plugin load Migrations
87 để tạo bảng, thêm cột, v.v. vào cơ sở dữ liệu của bạn, bạn thường sẽ cung cấp hai điều

  • tên của quá trình di chuyển mà bạn sẽ tạo [trong ví dụ của chúng tôi là ____290]

  • các cột của bảng sẽ được thêm hoặc xóa trong quá trình di chuyển [trong ví dụ của chúng tôi là ____291]

Do các quy ước, không phải tất cả các thay đổi lược đồ đều có thể được thực hiện thông qua các lệnh shell này

Ngoài ra, bạn có thể tạo một tệp di chuyển trống nếu muốn toàn quyền kiểm soát những gì cần được thực thi, bằng cách bỏ qua việc chỉ định định nghĩa cột

bin/cake plugin load Migrations
8

Tên tệp di chuyển

Tên di chuyển có thể theo bất kỳ mẫu nào sau đây

  • [

    $this->addPlugin['Migrations'];
    
    // Prior to 3.6.0 you need to use Plugin::load[]
    
    92] Tạo bảng được chỉ định

  • [

    $this->addPlugin['Migrations'];
    
    // Prior to 3.6.0 you need to use Plugin::load[]
    
    93] Bỏ bảng quy định. Bỏ qua các đối số trường được chỉ định

  • [

    $this->addPlugin['Migrations'];
    
    // Prior to 3.6.0 you need to use Plugin::load[]
    
    94] Thêm các trường vào bảng đã chỉ định

  • [

    $this->addPlugin['Migrations'];
    
    // Prior to 3.6.0 you need to use Plugin::load[]
    
    95] Xóa các trường khỏi bảng đã chỉ định

  • [

    $this->addPlugin['Migrations'];
    
    // Prior to 3.6.0 you need to use Plugin::load[]
    
    96] Thay đổi bảng quy định. Bí danh cho CreateTable và AddField

  • [

    $this->addPlugin['Migrations'];
    
    // Prior to 3.6.0 you need to use Plugin::load[]
    
    97] Thay đổi các trường từ bảng đã chỉ định

Bạn cũng có thể sử dụng

$this->addPlugin['Migrations'];

// Prior to 3.6.0 you need to use Plugin::load[]
98 làm tên cho quá trình di chuyển của mình. e.
$this->addPlugin['Migrations'];

// Prior to 3.6.0 you need to use Plugin::load[]
99

Phiên bản mới cakephp/migrations. 1. 5. 2

kể từ v1. 5. 2 của plugin di chuyển, tên tệp di chuyển sẽ được tự động hóa. Phiên bản plugin này chỉ khả dụng với bản phát hành CakePHP >= to 3. 1. Trước phiên bản plugin này, tên di chuyển sẽ ở dạng gạch dưới, tôi. e.

bin/cake bake migration CreateProducts name:string description:text created modified
0

Cảnh báo

Tên di chuyển được sử dụng làm tên lớp di chuyển và do đó có thể xung đột với các lần di chuyển khác nếu tên lớp không phải là duy nhất. Trong trường hợp này, có thể cần phải ghi đè tên theo cách thủ công vào một ngày sau đó hoặc chỉ cần thay đổi tên bạn đang chỉ định

Định nghĩa cột

Khi sử dụng các cột trong dòng lệnh, bạn nên nhớ rằng chúng tuân theo mẫu sau

$this->addPlugin['Migrations'];

// Prior to 3.6.0 you need to use Plugin::load[]
9

Chẳng hạn, sau đây là tất cả các cách hợp lệ để chỉ định trường email

  • bin/cake bake migration CreateProducts name:string description:text created modified
    
    1

  • bin/cake bake migration CreateProducts name:string description:text created modified
    
    2

  • bin/cake bake migration CreateProducts name:string description:text created modified
    
    3

  • bin/cake bake migration CreateProducts name:string description:text created modified
    
    4

  • bin/cake bake migration CreateProducts name:string description:text created modified
    
    5

Trong khi xác định số thập phân,

bin/cake bake migration CreateProducts name:string description:text created modified
6 có thể được xác định có độ chính xác và tỷ lệ, được phân tách bằng dấu phẩy

  • bin/cake bake migration CreateProducts name:string description:text created modified
    
    7

  • bin/cake bake migration CreateProducts name:string description:text created modified
    
    8

Dấu chấm hỏi sau fieldType sẽ làm cho cột trở nên vô giá trị

Tham số

bin/cake bake migration CreateProducts name:string description:text created modified
6 cho
bin/cake plugin load Migrations
00 là tùy chọn và phải luôn được viết giữa dấu ngoặc

Các trường có tên

bin/cake bake migration CreateProducts name:string description:text created modified
5 và
bin/cake bake migration CreateProducts name:string description:text created modified
7, cũng như bất kỳ trường nào có hậu tố
bin/cake plugin load Migrations
03, sẽ tự động được đặt thành loại
bin/cake bake migration CreateProducts name:string description:text created modified
6

Các loại trường là những loại thường được cung cấp bởi thư viện

bin/cake plugin load Migrations
05. Đó có thể là

  • chuỗi

  • chữ

  • số nguyên

  • số nguyên lớn

  • trôi nổi

  • số thập phân

  • ngày giờ

  • dấu thời gian

  • thời gian

  • ngày tháng

  • nhị phân

  • boolean

  • uuid

Có một số kinh nghiệm để chọn loại trường khi không được chỉ định hoặc được đặt thành giá trị không hợp lệ. Loại trường mặc định là

bin/cake bake migration CreateProducts name:string description:text created modified
2

  • Tôi. số nguyên

  • được tạo ra, sửa đổi, cập nhật. ngày giờ

  • vĩ độ, kinh độ [hoặc dạng rút gọn lat, lng]. số thập phân

Tạo bảng

Bạn có thể sử dụng

bin/cake plugin load Migrations
87 để tạo bảng

bin/cake bake migration CreateProducts name:string description:text created modified

Dòng lệnh trên sẽ tạo một tệp di chuyển giống như

table['products'];
        $table->addColumn['name', 'string', [
            'default' => null,
            'limit' => 255,
            'null' => false,
        ]];
        $table->addColumn['description', 'text', [
            'default' => null,
            'null' => false,
        ]];
        $table->addColumn['created', 'datetime', [
            'default' => null,
            'null' => false,
        ]];
        $table->addColumn['modified', 'datetime', [
            'default' => null,
            'null' => false,
        ]];
        $table->create[];
    }
}

Thêm cột vào bảng hiện có

Nếu tên di chuyển trong dòng lệnh có dạng “AddXXXToYYY” và theo sau là danh sách tên và loại cột thì tệp di chuyển chứa mã để tạo cột sẽ được tạo

bin/cake plugin load Migrations
1

Thực hiện dòng lệnh trên sẽ tạo ra

bin/cake plugin load Migrations
2

Thêm cột làm chỉ mục vào bảng

Cũng có thể thêm chỉ mục vào cột

bin/cake plugin load Migrations
3

sẽ tạo ra

bin/cake plugin load Migrations
4

Chỉ định độ dài trường

Phiên bản mới cakephp/migrations. 1. 4

Nếu bạn cần chỉ định độ dài trường, bạn có thể thực hiện việc đó trong dấu ngoặc ở loại trường, nghĩa là

bin/cake plugin load Migrations
5

Thực hiện dòng lệnh trên sẽ tạo ra

bin/cake plugin load Migrations
6

Nếu không chỉ định độ dài, thì độ dài cho một số loại cột nhất định sẽ được mặc định

  • chuỗi. 255

  • số nguyên. 11

  • số nguyên lớn. 20

Thay đổi một cột từ một bảng

Theo cách tương tự, bạn có thể tạo di chuyển để thay đổi cột bằng cách sử dụng dòng lệnh, nếu tên di chuyển có dạng “AlterXXXOnYYY”

bin/cake plugin load Migrations
7

sẽ tạo ra

bin/cake plugin load Migrations
8

Xóa một cột khỏi bảng

Theo cách tương tự, bạn có thể tạo di chuyển để xóa một cột bằng cách sử dụng dòng lệnh, nếu tên di chuyển có dạng “RemoveXXXFromYYY”

bin/cake plugin load Migrations
9

tạo tập tin

$this->addPlugin['Migrations'];

// Prior to 3.6.0 you need to use Plugin::load[]
0

Ghi chú

Lệnh removeColumn không thể đảo ngược, vì vậy phải được gọi trong phương thức up. Một lệnh gọi addColumn tương ứng sẽ được thêm vào phương thức down

Tạo di chuyển từ cơ sở dữ liệu hiện có

Nếu bạn đang xử lý một cơ sở dữ liệu có sẵn và muốn bắt đầu sử dụng di chuyển hoặc để kiểm soát phiên bản lược đồ ban đầu của cơ sở dữ liệu ứng dụng của bạn, bạn có thể chạy lệnh

bin/cake plugin load Migrations
08

$this->addPlugin['Migrations'];

// Prior to 3.6.0 you need to use Plugin::load[]
1

Nó sẽ tạo một tệp di chuyển có tên YYYYMMDDHHMMSS_Initial. php chứa tất cả các câu lệnh tạo cho tất cả các bảng trong cơ sở dữ liệu của bạn

Theo mặc định, ảnh chụp nhanh sẽ được tạo bằng cách kết nối với cơ sở dữ liệu được xác định trong cấu hình kết nối

bin/cake plugin load Migrations
09. Nếu bạn cần tạo ảnh chụp nhanh từ một nguồn dữ liệu khác, bạn có thể sử dụng tùy chọn
bin/cake plugin load Migrations
10

$this->addPlugin['Migrations'];

// Prior to 3.6.0 you need to use Plugin::load[]
2

Bạn cũng có thể đảm bảo ảnh chụp nhanh chỉ bao gồm các bảng mà bạn đã xác định các lớp mô hình tương ứng bằng cách sử dụng cờ

bin/cake plugin load Migrations
11

$this->addPlugin['Migrations'];

// Prior to 3.6.0 you need to use Plugin::load[]
3

Khi sử dụng cờ

bin/cake plugin load Migrations
11, trình bao sẽ xem qua các lớp
bin/cake plugin load Migrations
13 của ứng dụng của bạn và sẽ chỉ thêm các bảng mô hình vào ảnh chụp nhanh

Logic tương tự sẽ được áp dụng hoàn toàn nếu bạn muốn tạo ảnh chụp nhanh cho plugin. Để làm như vậy, bạn cần sử dụng tùy chọn

bin/cake plugin load Migrations
14

$this->addPlugin['Migrations'];

// Prior to 3.6.0 you need to use Plugin::load[]
4

Chỉ những bảng có lớp mô hình đối tượng

bin/cake plugin load Migrations
13 được xác định mới được thêm vào ảnh chụp nhanh plugin của bạn

Ghi chú

Khi tạo ảnh chụp nhanh cho một plugin, các tệp di chuyển sẽ được tạo trong thư mục config/Migrations của plugin của bạn

Xin lưu ý rằng khi bạn nướng ảnh chụp nhanh, nó sẽ tự động được thêm vào bảng nhật ký phinx khi được di chuyển

Tạo khác biệt giữa hai trạng thái cơ sở dữ liệu

Phiên bản mới cakephp/migrations. 1. 6. 0

Bạn có thể tạo tệp di chuyển sẽ nhóm tất cả sự khác biệt giữa hai trạng thái cơ sở dữ liệu bằng cách sử dụng mẫu nướng

bin/cake plugin load Migrations
16. Để làm như vậy, bạn có thể sử dụng lệnh sau

$this->addPlugin['Migrations'];

// Prior to 3.6.0 you need to use Plugin::load[]
5

Để có điểm so sánh từ trạng thái cơ sở dữ liệu hiện tại của bạn, trình bao di chuyển sẽ tạo tệp "kết xuất" sau mỗi lệnh gọi

bin/cake plugin load Migrations
17 hoặc
bin/cake plugin load Migrations
82. Tệp kết xuất là một tệp chứa trạng thái lược đồ đầy đủ của cơ sở dữ liệu của bạn tại một thời điểm nhất định

Khi tệp kết xuất được tạo, mọi sửa đổi bạn thực hiện trực tiếp trong hệ thống quản lý cơ sở dữ liệu của mình sẽ được thêm vào tệp di chuyển được tạo khi bạn gọi lệnh

bin/cake plugin load Migrations
19

Theo mặc định, khác biệt sẽ được tạo bằng cách kết nối với cơ sở dữ liệu được xác định trong cấu hình kết nối

bin/cake plugin load Migrations
09. Nếu bạn cần tạo khác biệt từ một nguồn dữ liệu khác, bạn có thể sử dụng tùy chọn
bin/cake plugin load Migrations
10

$this->addPlugin['Migrations'];

// Prior to 3.6.0 you need to use Plugin::load[]
6

Nếu bạn muốn sử dụng tính năng tìm khác biệt trên một ứng dụng đã có lịch sử di chuyển, bạn cần tạo thủ công tệp kết xuất sẽ được sử dụng để so sánh

Trạng thái cơ sở dữ liệu phải giống như trạng thái nếu bạn vừa di chuyển tất cả các lần di chuyển của mình trước khi tạo tệp kết xuất. Khi tệp kết xuất được tạo, bạn có thể bắt đầu thực hiện các thay đổi trong cơ sở dữ liệu của mình và sử dụng lệnh

bin/cake plugin load Migrations
19 bất cứ khi nào bạn thấy phù hợp

Ghi chú

Shell di chuyển không thể phát hiện việc đổi tên cột

Các lệnh

bin/cake plugin load Migrations
17. Áp dụng di chuyển

Khi bạn đã tạo hoặc ghi tệp di chuyển của mình, bạn cần thực hiện lệnh sau để áp dụng các thay đổi cho cơ sở dữ liệu của mình

$this->addPlugin['Migrations'];

// Prior to 3.6.0 you need to use Plugin::load[]
7

bin/cake plugin load Migrations
82. Hoàn nguyên di chuyển

Lệnh Rollback được sử dụng để hoàn tác các lần di chuyển trước đó được thực hiện bởi plugin này. Đó là hành động ngược lại của lệnh

bin/cake plugin load Migrations
17

$this->addPlugin['Migrations'];

// Prior to 3.6.0 you need to use Plugin::load[]
8

Bạn cũng có thể sử dụng các tùy chọn

bin/cake plugin load Migrations
26,
bin/cake plugin load Migrations
10 và
bin/cake plugin load Migrations
14 giống như đối với lệnh
bin/cake plugin load Migrations
17

bin/cake plugin load Migrations
30. Trạng thái di chuyển

Lệnh Trạng thái in danh sách tất cả các lần di chuyển, cùng với trạng thái hiện tại của chúng. Bạn có thể sử dụng lệnh này để xác định những lần di chuyển nào đã được chạy

$this->addPlugin['Migrations'];

// Prior to 3.6.0 you need to use Plugin::load[]
9

Bạn cũng có thể xuất kết quả dưới dạng chuỗi có định dạng JSON bằng cách sử dụng tùy chọn

bin/cake plugin load Migrations
31 [hoặc viết tắt là
bin/cake plugin load Migrations
32]

table['products'];
        $table->addColumn['name', 'string', [
            'default' => null,
            'limit' => 255,
            'null' => false,
        ]];
        $table->addColumn['description', 'text', [
            'default' => null,
            'null' => false,
        ]];
        $table->addColumn['created', 'datetime', [
            'default' => null,
            'null' => false,
        ]];
        $table->addColumn['modified', 'datetime', [
            'default' => null,
            'null' => false,
        ]];
        $table->create[];
    }
}
0

Bạn cũng có thể sử dụng các tùy chọn

bin/cake plugin load Migrations
26,
bin/cake plugin load Migrations
10 và
bin/cake plugin load Migrations
14 giống như đối với lệnh
bin/cake plugin load Migrations
17

bin/cake plugin load Migrations
37. Đánh dấu di chuyển là đã di chuyển

Đôi khi có thể hữu ích khi đánh dấu một tập hợp các lần di chuyển là đã di chuyển mà không thực sự chạy chúng. Để làm điều này, bạn có thể sử dụng lệnh

bin/cake plugin load Migrations
37. Lệnh hoạt động trơn tru như các lệnh khác

Bạn có thể đánh dấu tất cả các lần di chuyển là đã di chuyển bằng lệnh này

table['products'];
        $table->addColumn['name', 'string', [
            'default' => null,
            'limit' => 255,
            'null' => false,
        ]];
        $table->addColumn['description', 'text', [
            'default' => null,
            'null' => false,
        ]];
        $table->addColumn['created', 'datetime', [
            'default' => null,
            'null' => false,
        ]];
        $table->addColumn['modified', 'datetime', [
            'default' => null,
            'null' => false,
        ]];
        $table->create[];
    }
}
1

Bạn cũng có thể đánh dấu tất cả các lần di chuyển lên một phiên bản cụ thể là đã di chuyển bằng cách sử dụng tùy chọn

bin/cake plugin load Migrations
39

table['products'];
        $table->addColumn['name', 'string', [
            'default' => null,
            'limit' => 255,
            'null' => false,
        ]];
        $table->addColumn['description', 'text', [
            'default' => null,
            'null' => false,
        ]];
        $table->addColumn['created', 'datetime', [
            'default' => null,
            'null' => false,
        ]];
        $table->addColumn['modified', 'datetime', [
            'default' => null,
            'null' => false,
        ]];
        $table->create[];
    }
}
2

Nếu bạn không muốn di chuyển được nhắm mục tiêu được đánh dấu là đã di chuyển trong quá trình, bạn có thể sử dụng cờ

bin/cake plugin load Migrations
40 với nó

table['products'];
        $table->addColumn['name', 'string', [
            'default' => null,
            'limit' => 255,
            'null' => false,
        ]];
        $table->addColumn['description', 'text', [
            'default' => null,
            'null' => false,
        ]];
        $table->addColumn['created', 'datetime', [
            'default' => null,
            'null' => false,
        ]];
        $table->addColumn['modified', 'datetime', [
            'default' => null,
            'null' => false,
        ]];
        $table->create[];
    }
}
3

Cuối cùng, nếu bạn chỉ muốn đánh dấu di chuyển được nhắm mục tiêu là đã di chuyển, bạn có thể sử dụng cờ

bin/cake plugin load Migrations
41

table['products'];
        $table->addColumn['name', 'string', [
            'default' => null,
            'limit' => 255,
            'null' => false,
        ]];
        $table->addColumn['description', 'text', [
            'default' => null,
            'null' => false,
        ]];
        $table->addColumn['created', 'datetime', [
            'default' => null,
            'null' => false,
        ]];
        $table->addColumn['modified', 'datetime', [
            'default' => null,
            'null' => false,
        ]];
        $table->create[];
    }
}
4

Bạn cũng có thể sử dụng các tùy chọn

bin/cake plugin load Migrations
26,
bin/cake plugin load Migrations
10 và
bin/cake plugin load Migrations
14 giống như đối với lệnh
bin/cake plugin load Migrations
17

Ghi chú

Khi bạn tạo ảnh chụp nhanh bằng lệnh

bin/cake plugin load Migrations
46, quá trình di chuyển đã tạo sẽ tự động được đánh dấu là đã di chuyển

Lệnh này mong đợi số phiên bản di chuyển làm đối số

table['products'];
        $table->addColumn['name', 'string', [
            'default' => null,
            'limit' => 255,
            'null' => false,
        ]];
        $table->addColumn['description', 'text', [
            'default' => null,
            'null' => false,
        ]];
        $table->addColumn['created', 'datetime', [
            'default' => null,
            'null' => false,
        ]];
        $table->addColumn['modified', 'datetime', [
            'default' => null,
            'null' => false,
        ]];
        $table->create[];
    }
}
5

Nếu bạn muốn đánh dấu tất cả các lần di chuyển là đã di chuyển, bạn có thể sử dụng giá trị đặc biệt

bin/cake plugin load Migrations
47. Nếu bạn sử dụng nó, nó sẽ đánh dấu tất cả các lần di chuyển được tìm thấy là đã di chuyển

table['products'];
        $table->addColumn['name', 'string', [
            'default' => null,
            'limit' => 255,
            'null' => false,
        ]];
        $table->addColumn['description', 'text', [
            'default' => null,
            'null' => false,
        ]];
        $table->addColumn['created', 'datetime', [
            'default' => null,
            'null' => false,
        ]];
        $table->addColumn['modified', 'datetime', [
            'default' => null,
            'null' => false,
        ]];
        $table->create[];
    }
}
6

bin/cake plugin load Migrations
48. Tạo cơ sở dữ liệu của bạn

kể từ 1. 5. 5, bạn có thể sử dụng trình bao

bin/cake plugin load Migrations
83 để khởi tạo cơ sở dữ liệu của mình. Điều này tận dụng tính năng hạt giống của thư viện Phinx. Theo mặc định, các tệp hạt giống sẽ được tìm trong thư mục
bin/cake plugin load Migrations
50 của ứng dụng của bạn. Hãy chắc chắn rằng bạn làm theo

Đối với việc di chuyển, giao diện

bin/cake plugin load Migrations
87 được cung cấp cho các tệp hạt giống

table['products'];
        $table->addColumn['name', 'string', [
            'default' => null,
            'limit' => 255,
            'null' => false,
        ]];
        $table->addColumn['description', 'text', [
            'default' => null,
            'null' => false,
        ]];
        $table->addColumn['created', 'datetime', [
            'default' => null,
            'null' => false,
        ]];
        $table->addColumn['modified', 'datetime', [
            'default' => null,
            'null' => false,
        ]];
        $table->create[];
    }
}
7

Phiên bản mới cakephp/migrations. 1. 6. 4

Các tùy chọn

bin/cake plugin load Migrations
52,
bin/cake plugin load Migrations
53 và
bin/cake plugin load Migrations
54 đã được thêm vào để xuất dữ liệu từ cơ sở dữ liệu của bạn

kể từ 1. 6. 4, lệnh

bin/cake plugin load Migrations
55 cho phép bạn tạo một tệp hạt giống với dữ liệu được xuất từ ​​cơ sở dữ liệu của bạn bằng cách sử dụng cờ
bin/cake plugin load Migrations
52

table['products'];
        $table->addColumn['name', 'string', [
            'default' => null,
            'limit' => 255,
            'null' => false,
        ]];
        $table->addColumn['description', 'text', [
            'default' => null,
            'null' => false,
        ]];
        $table->addColumn['created', 'datetime', [
            'default' => null,
            'null' => false,
        ]];
        $table->addColumn['modified', 'datetime', [
            'default' => null,
            'null' => false,
        ]];
        $table->create[];
    }
}
8

Theo mặc định, nó sẽ xuất tất cả các hàng được tìm thấy trong bảng của bạn. Bạn có thể giới hạn số hàng được xuất bằng cách sử dụng tùy chọn

bin/cake plugin load Migrations
53

table['products'];
        $table->addColumn['name', 'string', [
            'default' => null,
            'limit' => 255,
            'null' => false,
        ]];
        $table->addColumn['description', 'text', [
            'default' => null,
            'null' => false,
        ]];
        $table->addColumn['created', 'datetime', [
            'default' => null,
            'null' => false,
        ]];
        $table->addColumn['modified', 'datetime', [
            'default' => null,
            'null' => false,
        ]];
        $table->create[];
    }
}
9

Nếu bạn chỉ muốn đưa một số trường đã chọn từ bảng vào tệp hạt giống của mình, bạn có thể sử dụng tùy chọn

bin/cake plugin load Migrations
54. Nó lấy danh sách các trường để đưa vào dưới dạng chuỗi giá trị được phân tách bằng dấu phẩy

$this->addPlugin['Migrations'];

// Prior to 3.6.0 you need to use Plugin::load[]
00

Mẹo

Tất nhiên bạn có thể sử dụng cả hai tùy chọn

bin/cake plugin load Migrations
53 và
bin/cake plugin load Migrations
54 trong cùng một lệnh gọi

Để tạo cơ sở dữ liệu của bạn, bạn có thể sử dụng lệnh phụ

bin/cake plugin load Migrations
48

$this->addPlugin['Migrations'];

// Prior to 3.6.0 you need to use Plugin::load[]
01

Xin lưu ý rằng, trái ngược với việc di chuyển, các bộ gieo hạt không được theo dõi, điều đó có nghĩa là cùng một bộ gieo hạt có thể được áp dụng nhiều lần

Gọi một Seeder từ một Seeder khác

Phiên bản mới cakephp/migrations. 1. 6. 2

Thông thường khi seeding phải tuân thủ thứ tự chèn dữ liệu để không vi phạm ràng buộc. Vì Seeder được thực thi theo thứ tự bảng chữ cái theo mặc định, nên bạn có thể sử dụng phương thức

bin/cake plugin load Migrations
62 để xác định trình tự thực thi seeder của riêng mình

$this->addPlugin['Migrations'];

// Prior to 3.6.0 you need to use Plugin::load[]
02

Ghi chú

Đảm bảo mở rộng plugin Migration lớp

bin/cake plugin load Migrations
63 nếu bạn muốn có thể sử dụng phương thức
bin/cake plugin load Migrations
64. Lớp này đã được thêm vào với bản phát hành 1. 6. 2

bin/cake plugin load Migrations
65. Tạo tệp kết xuất cho tính năng nướng khác

Lệnh Dump tạo một tệp được sử dụng với mẫu nướng

bin/cake plugin load Migrations
16

Mỗi tệp kết xuất được tạo là dành riêng cho Kết nối mà nó được tạo từ đó [và có hậu tố như vậy]. Điều này cho phép lệnh

bin/cake plugin load Migrations
19 tính toán khác biệt chính xác trong trường hợp ứng dụng của bạn đang xử lý nhiều cơ sở dữ liệu có thể từ các nhà cung cấp cơ sở dữ liệu khác nhau

Tệp kết xuất được tạo trong cùng thư mục với tệp di chuyển của bạn

Bạn cũng có thể sử dụng các tùy chọn

bin/cake plugin load Migrations
26,
bin/cake plugin load Migrations
10 và
bin/cake plugin load Migrations
14 giống như đối với lệnh
bin/cake plugin load Migrations
17

Sử dụng di chuyển cho các bài kiểm tra

Nếu bạn đang sử dụng các lần di chuyển cho lược đồ ứng dụng của mình, bạn cũng có thể sử dụng các lần di chuyển tương tự đó để xây dựng lược đồ trong các thử nghiệm của mình. Trong tệp

bin/cake plugin load Migrations
72 của ứng dụng, bạn có thể sử dụng lớp
bin/cake plugin load Migrations
73 để xây dựng lược đồ khi chạy thử nghiệm.
bin/cake plugin load Migrations
73 sẽ sử dụng lược đồ hiện có nếu nó là lược đồ hiện tại và nếu lịch sử di chuyển trong cơ sở dữ liệu khác với lịch sử trong hệ thống tệp, tất cả các bảng sẽ bị hủy và quá trình di chuyển sẽ được chạy lại từ đầu

$this->addPlugin['Migrations'];

// Prior to 3.6.0 you need to use Plugin::load[]
03

Nếu bạn cần chạy nhiều nhóm di chuyển, chúng có thể được chạy như sau

$this->addPlugin['Migrations'];

// Prior to 3.6.0 you need to use Plugin::load[]
04

Nếu cơ sở dữ liệu của bạn cũng chứa các bảng không được quản lý bởi ứng dụng của bạn giống như các bảng được tạo bởi PostGIS, thì bạn có thể loại trừ các bảng đó khỏi hành vi thả & cắt bớt bằng cách sử dụng tùy chọn

bin/cake plugin load Migrations
75

$this->addPlugin['Migrations'];

// Prior to 3.6.0 you need to use Plugin::load[]
05

Tùy chọn

bin/cake plugin load Migrations
75 chấp nhận mẫu tương thích với
bin/cake plugin load Migrations
77 để loại trừ các bảng khỏi thao tác thả và cắt bớt

Nếu bạn cần xem đầu ra gỡ lỗi bổ sung từ quá trình di chuyển đang được chạy, bạn có thể bật trình ghi nhật ký cấp độ

bin/cake plugin load Migrations
78

Sử dụng di chuyển trong plugin

Các plugin cũng có thể cung cấp các tệp di chuyển. Điều này làm cho các plugin dự định phân phối trở nên di động và dễ cài đặt hơn nhiều. Tất cả các lệnh trong plugin Di chuyển đều hỗ trợ tùy chọn

bin/cake plugin load Migrations
14 hoặc
bin/cake plugin load Migrations
80 sẽ xác định phạm vi thực thi đối với các lần di chuyển liên quan đến plugin đó

$this->addPlugin['Migrations'];

// Prior to 3.6.0 you need to use Plugin::load[]
06

Chạy Di chuyển trong môi trường không có shell

Phiên bản mới cakephp/migrations. 1. 2. 0

Kể từ khi phát hành phiên bản 1. 2 của plugin di chuyển, bạn có thể chạy di chuyển từ môi trường không phải trình bao, trực tiếp từ một ứng dụng, bằng cách sử dụng lớp

bin/cake plugin load Migrations
81 mới. Điều này có thể hữu ích trong trường hợp bạn đang phát triển trình cài đặt plugin cho CMS chẳng hạn. Lớp
bin/cake plugin load Migrations
81 cho phép bạn chạy các lệnh sau từ trình bao di chuyển

  • di chuyển

  • phục hồi

  • đánh dấuĐã di cư

  • trạng thái

  • hạt giống

Mỗi lệnh này có một phương thức được định nghĩa trong lớp

bin/cake plugin load Migrations
81

Đây là cách sử dụng nó

$this->addPlugin['Migrations'];

// Prior to 3.6.0 you need to use Plugin::load[]
07

Các phương thức có thể chấp nhận một mảng các tham số phù hợp với các tùy chọn từ các lệnh

$this->addPlugin['Migrations'];

// Prior to 3.6.0 you need to use Plugin::load[]
08

Bạn có thể chuyển bất kỳ tùy chọn nào mà lệnh shell sẽ thực hiện. Ngoại lệ duy nhất là lệnh

bin/cake plugin load Migrations
84 đang mong đợi số phiên bản của các lần di chuyển được đánh dấu là đã di chuyển làm đối số đầu tiên. Truyền mảng tham số làm đối số thứ hai cho phương thức này

Theo tùy chọn, bạn có thể truyền các tham số này vào hàm tạo của lớp. Chúng sẽ được sử dụng như mặc định và điều này sẽ giúp bạn không phải chuyển chúng trong mỗi lệnh gọi phương thức

$this->addPlugin['Migrations'];

// Prior to 3.6.0 you need to use Plugin::load[]
09

Nếu bạn cần ghi đè một hoặc nhiều tham số mặc định cho một lần gọi, bạn có thể chuyển chúng vào phương thức

bin/cake migrations rollback
0

Các mẹo và thủ thuật

Tạo khóa chính tùy chỉnh

Nếu bạn cần tránh việc tự động tạo khóa chính

bin/cake migrations rollback
9 khi thêm bảng mới vào cơ sở dữ liệu, bạn có thể sử dụng đối số thứ hai của phương thức
bin/cake plugin load Migrations
86

bin/cake migrations rollback
1

Ở trên sẽ tạo một cột

bin/cake plugin load Migrations
87
bin/cake migrations rollback
9 cũng là khóa chính

Ghi chú

Khi chỉ định một khóa chính tùy chỉnh trên dòng lệnh, bạn phải lưu ý nó là khóa chính trong trường id, nếu không, bạn có thể gặp lỗi liên quan đến các trường id trùng lặp, tôi. e

bin/cake migrations rollback
2

Ngoài ra, vì Migrations 1. 3, một cách mới để xử lý khóa chính đã được giới thiệu. Để làm như vậy, lớp di chuyển của bạn nên mở rộng lớp

bin/cake plugin load Migrations
89 mới. Bạn có thể chỉ định một thuộc tính
bin/cake plugin load Migrations
90 trong lớp Migration và đặt nó thành
bin/cake plugin load Migrations
91, điều này sẽ tắt tính năng tạo cột
bin/cake migrations rollback
9 tự động. Bạn sẽ cần tạo cột theo cách thủ công sẽ được sử dụng làm khóa chính và thêm nó vào phần khai báo bảng

bin/cake migrations rollback
3

So với cách xử lý khóa chính trước đây, phương pháp này cung cấp cho bạn khả năng kiểm soát nhiều hơn đối với định nghĩa cột khóa chính. không dấu hay không, giới hạn, nhận xét, v.v.

Tất cả các lần di chuyển và ảnh chụp nhanh sẽ sử dụng cách mới này khi cần thiết

Cảnh báo

Xử lý khóa chính chỉ có thể được thực hiện trên các thao tác tạo bảng. Điều này là do những hạn chế đối với một số máy chủ cơ sở dữ liệu mà plugin hỗ trợ

bộ sưu tập

Nếu bạn cần tạo một bảng có đối chiếu khác với đối chiếu mặc định của cơ sở dữ liệu, bạn có thể xác định nó bằng phương thức

bin/cake plugin load Migrations
86, như một tùy chọn

bin/cake migrations rollback
4

Tuy nhiên, lưu ý rằng điều này chỉ có thể được thực hiện khi tạo bảng. hiện tại không có cách nào để thêm cột vào bảng hiện có với đối chiếu khác với bảng hoặc cơ sở dữ liệu. Hiện tại chỉ có

bin/cake plugin load Migrations
94 và
bin/cake plugin load Migrations
95 hỗ trợ khóa cấu hình này

Cập nhật tên cột và sử dụng các đối tượng Bảng

Nếu bạn sử dụng một đối tượng CakePHP ORM Table để thao tác các giá trị từ cơ sở dữ liệu của bạn cùng với việc đổi tên hoặc xóa một cột, hãy đảm bảo rằng bạn tạo một phiên bản mới của đối tượng Table sau lệnh gọi

bin/cake plugin load Migrations
96. Sổ đăng ký đối tượng Bảng bị xóa sau cuộc gọi
bin/cake plugin load Migrations
96 để làm mới lược đồ được phản ánh và lưu trữ trong đối tượng Bảng khi khởi tạo

Di chuyển và triển khai

Nếu bạn sử dụng plugin khi triển khai ứng dụng của mình, hãy nhớ xóa bộ đệm ORM để nó làm mới siêu dữ liệu cột của bảng của bạn. Nếu không, bạn có thể gặp lỗi về các cột không tồn tại khi thực hiện các thao tác trên các cột mới đó. CakePHP Core bao gồm Schema Cache Shell mà bạn có thể sử dụng để thực hiện thao tác này

bin/cake migrations rollback
5

Đổi tên bảng

Plugin cung cấp cho bạn khả năng đổi tên bảng, sử dụng phương pháp

bin/cake plugin load Migrations
98. Trong tệp di chuyển của bạn, bạn có thể làm như sau

bin/cake migrations rollback
6

Bỏ qua việc tạo tệp
bin/cake plugin load Migrations
99

Phiên bản mới cakephp/migrations. 1. 6. 5

Để tính năng tìm khác biệt hoạt động, một. lock được tạo mỗi khi bạn di chuyển, khôi phục hoặc tạo ảnh chụp nhanh, để theo dõi trạng thái lược đồ cơ sở dữ liệu của bạn tại bất kỳ thời điểm nào. Ví dụ: bạn có thể bỏ qua việc tạo tệp này khi triển khai trên môi trường sản xuất của mình bằng cách sử dụng tùy chọn

$this->addPlugin['Migrations'];

// Prior to 3.6.0 you need to use Plugin::load[]
00 cho lệnh đã nói ở trên

bin/cake migrations rollback
7

Hỗ trợ tự động hoàn thành IDE

Plugin IdeHelper có thể giúp bạn nhận được nhiều hỗ trợ IDE hơn cho các bảng, tên cột của chúng và các loại cột có thể có. PHPStorm cụ thể hiểu thông tin meta và có thể giúp bạn tự động hoàn thành những thông tin đó

Chủ Đề