Laravel 5.4 Di chuyển bảng cụ thể


84

Xin chào, hãy đọc tất cả các tài liệu kèm theo tại đây trong https://laravel.com/docs/5.4/migrations .

Có cách nào về cách di chuyển một tệp di chuyển nhất định (chỉ 1 lần di chuyển), vì ngay bây giờ mỗi khi có thay đổi tôi sử dụng php artisan migrate:refreshvà tất cả các trường đang được đặt lại.

Câu trả lời:


132

Trước tiên, bạn nên tạo một migrationtệp cho bảng của mình như:

public function up()
    {
        Schema::create('test', function (Blueprint $table) {
            $table->increments('id');
            $table->string('fname',255);
            $table->string('lname',255);
            $table->rememberToken();
            $table->timestamps();
        });
    }

Sau khi tạo thư mục thử nghiệm trong thư mục di chuyển, sau đó di chuyển mới tạo được di chuyển / sao chép trong thư mục thử nghiệm và chạy lệnh dưới đây trong terminal / cmd của bạn như:

php artisan migrate --path=/database/migrations/test/

Cảm ơn. Điều này thật đúng với gì mà tôi đã tìm kiếm.
sadiq

4
php Artian migrate --path = database / migrations / test / working for me
Joyal

Nếu điều này không hiệu quả, bạn có câu trả lời tốt hơn tại stackoverflow.com/questions/19102197/…
Hari Harker

76

bạn nên thêm đường dẫn vào tệp di chuyển của mình để chỉ làm mới bảng này và chạy

php artisan migrate:refresh --path=/database/migrations/fileName.php

1
Làm tốt lắm. Không có gì hiệu quả nhưng giải pháp của bạn đã hoạt động. Cảm ơn nhiều.
Vipertecpro

Chính xác là tôi đang tìm kiếm :) Cảm ơn người bạn đời
VishalParkash

đôi khi nó sẽ là database / migrations / fileName.php mà không có dấu gạch chéo ngược đầu tiên
Ahmed Aboud

Điều đáng nói là với việc làm mới, tất cả dữ liệu của bạn sẽ biến mất. Bạn nên lưu dữ liệu trong db của mình dưới dạng xuất và nhập dữ liệu đó sau khi làm mới nếu bạn muốn giữ dữ liệu của mình.
Taranis

@Taranis Chỉ là dữ liệu của bảng mà bạn đang làm mới không phải tất cả
Wissem SASSI

54

Chỉ cần nhìn vào migrationsbảng trong cơ sở dữ liệu của bạn, sẽ có danh sách tên tệp di chuyển và giá trị số lô.

Giả sử bạn có cấu trúc sau,

id     migration                                           batch

1      2014_10_12_000000_create_users_table                  1 
2      2014_10_12_100000_create_password_resets_table        1
3      2016_09_07_103432_create_tabel_roles                  1

Nếu bạn chỉ muốn khôi phục 2016_09_07_103432_create_tabel_rolesdi chuyển, hãy thay đổi giá trị lô di chuyển của nó thành 2, giá trị cao nhất trong số tất cả và sau đó chỉ cần thực hiện theo sau.

php artisan migrate:rollback

Ở đây chỉ bảng có giá trị lô 2 sẽ được khôi phục. Bây giờ, thực hiện các thay đổi đối với bảng đó và chạy lệnh console sau.

php artisan migrate

Giá trị lô trong migrations bảng xác định thứ tự di chuyển. khi bạn khôi phục, những lần di chuyển mới nhất hoặc có giá trị lô cao nhất sẽ được khôi phục lại lúc đầu và sau đó là những lần di chuyển khác. Vì vậy, bạn có thể thay đổi giá trị trong cơ sở dữ liệu và sau đó khôi phục một tệp di chuyển cụ thể.

Mặc dù việc thay đổi số lô mỗi lần không phải là một ý kiến ​​hay vì mối quan hệ giữa các cấu trúc bảng, nhưng chúng ta có thể sử dụng trường hợp này cho một số trường hợp mà việc khôi phục bảng đơn lẻ không vi phạm tính toàn vẹn giữa các bảng.

Mong là bạn hiểu.


@MartneyAcha Tôi rất vui vì bạn đã có giải pháp cho vấn đề của mình.
Sagar Gautam

Lời giải thích hay. Nếu bạn có một mối quan hệ chính nước ngoài trong bảng của bạn, điều đó sẽ không làm việc
Ogbonna Vitalis

@OgbonnaVitalis Cảm ơn bạn, đây sẽ là cách dễ dàng hơn cho các bảng độc lập. Câu trả lời được chấp nhận cung cấp cách chính xác để khôi phục và di chuyển một bảng. đối với nhiều bảng độc lập, nó sẽ hoạt động.
Sagar Gautam

14

nếu bạn sử dụng tab để tự động hoàn thành

php artisan migrate --path='./database/migrations/2019_12_31_115457_create_coworking_personal_memberships_table.php'

không làm việc cho tôi, sử dụng zsh
digout

8

Bạn cần đặt (các) tệp vào một thư mục mới (ví dụ: đã chọn) và sau đó áp dụng

php artisan migrate  --path=/database/migrations/selected

nếu bạn cần khôi phục:

php artisan migrate:rollback  --path=/database/migrations/selected

Ghi chú:

php artisan migrate:refresh

điều này sẽ khôi phục và sau đó di chuyển tất cả các tệp di chuyển trong thư mục mặc định (/ database / migrations)


Không cần tạo thư mục mới, bạn có thể đặt trực tiếp tên tệp như '--path = / database / migrations / fileName.php'.
Wissem SASSI

8

Bạn có thể chạy lệnh như thế này

php artisan migrate --path=/database/migrations/2020_04_10_130703_create_test_table.php

7
php artisan help migrate

Bạn sẽ thấy tùy chọn:

--path [= PATH] Đường dẫn đến tệp di chuyển sẽ được thực thi

Nhân tiện, bạn có thể chỉ ra thư mục gốc của tệp mà bạn muốn di chuyển:

php artisan migrate --path=/database/migrations/sample.php

Hoặc, Bạn có thể tạo một thư mục mới trong phần di chuyển, sau đó di chuyển tất cả các tệp di chuyển bạn muốn vào bên trong nó:

php artisan migrate --path=/database/migrations/new_folder

bạn vừa bỏ lỡ một 's'. Nó phải là 'cuộc di cư'! php nghệ nhân di cư --path = / cơ sở dữ liệu / di cư / new_folder
Pasindu Jayanath

php nghệ nhân di cư --path = / cơ sở dữ liệu / di cư / new_folder / cần người cuối cùng '/'
Pasindu Jayanath

5

Chỉ muốn đăng một giải pháp khác, mà tôi nghĩ là đáng nói.

  1. Tìm hàng có tên di chuyển của bạn trong bảng di chuyển và XÓA nó. Nó sẽ giống như sau: 2016_06_01_000001_create_oauth_auth_codes_table
  2. Xóa bảng của bạn khỏi cơ sở dữ liệu, ví dụ: DROP TABLE oauth_auth_codes
  3. Chạy di chuyển nghệ nhân php

Nó sẽ chỉ di chuyển bảng bạn cần và sẽ không chạm vào bất kỳ thứ gì khác



3

Xóa bảng và xóa bản ghi của nó khỏi bảng di chuyển.

Sau đó, bạn chỉ cần chạy lại quá trình di chuyển:

php artisan migrate

3

Chỉnh sửa- loại bỏ dấu gạch chéo trước cơ sở dữ liệu

$ php artisan migrate --path=database/migrations/migration.php

1
Không có gì để di chuyển.
zod


3

Nếu bạn muốn tạo một bảng cụ thể. Bạn có thể sử dụng mã này. Nó hoạt động cho các phiên bản laravel (5.x).

php artisan migrate:refresh --path=/database/migrations/fileName.php

2

Hoặc bạn có thể chỉ cần xóa tên tệp di chuyển khỏi cơ sở dữ liệu của mình, trong bảng "di chuyển" và sau đó chạy: php Artitsanigration


1

Bạn có thể thử sử dụng tùy chọn --path = để xác định thư mục con cụ thể mà bạn muốn thực thi và đặt các di chuyển cụ thể vào đó.

Ngoài ra, bạn sẽ cần xóa tham chiếu và bảng khỏi DB và các bảng di chuyển không lý tưởng: /


1

Nếu bạn muốn tạo một bảng khác, chỉ cần tạo một tệp di chuyển mới. Nó sẽ hoạt động.

Nếu bạn tạo một di chuyển có tên users_tablevới id, first_name, last_name. Bạn có thể tạo một tệp di chuyển như

    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->increments('id');
            $table->string('first_name',255);
            $table->string('last_name',255);
            $table->rememberToken();
            $table->timestamps();
        });
    }
    public function down()
    {
        Schema::dropIfExists('users');
    }

Nếu bạn muốn thêm một tệp khác như "trạng thái" mà không cần di chuyển: refresh. Bạn có thể tạo một tệp di chuyển khác như "add_status_filed_to_users_table"

public function up()
{
    Schema::table('users', function($table) {
        $table->integer('status');
    });
} 

Và đừng quên thêm tùy chọn khôi phục:

public function down()
{
    Schema::table('users', function($table) {
        $table->dropColumn('status');
    });
}

Và khi bạn chạy di chuyển với php artitsan migration, Nó chỉ di chuyển tệp di chuyển mới.

Nhưng nếu bạn thêm "trạng thái" đã nộp vào tệp kiểm duyệt đầu tiên (users_table) và chạy quá trình di chuyển. Không có gì để di chuyển. Bạn cần chạyphp artisan migrate:refresh .

Hy vọng điều này giúp đỡ.



1

php Artian migrate --path = / database / migrations / fileName.php

Chỉ cần làm theo hướng dẫn thực hiện tên tệp thông dụng này ở đây phải là tên bảng di chuyển của bạn Ví dụ: php artistan migrate --path = / database / migrations / 2020_02_21_101937_create_jobs_table.php



0

Bạn chỉ có thể chạy lệnh này trong thiết bị đầu cuối của mình

php artisan migrate --path=database/migrations/2020_10_01_164611_create_asset_info_table.php

Sau khi di chuyển, bạn nên đặt tên tệp cụ thể. hoặc nếu bạn có bất kỳ thư mục nào bên trong quá trình di chuyển thì chỉ cần thêm tên thư mục đó sau khi di chuyển.

Như thế này

php artisan migrate --path=database/migrations/yourfolder/2020_10_01_164611_create_asset_info_table.php

Tôi hy vọng điều này sẽ giúp bạn một chút. Chúc bạn mã hóa vui vẻ.


-1

Trước tiên, bạn nên thực hiện các lệnh sau:

Bước 1:

php artisan migrate:rollback

Bước 2:

php artisan migrate

Bảng của bạn sẽ trở lại trong cơ sở dữ liệu.


Sẽ hữu ích hơn nếu bạn đặt mô tả nhỏ cho từng bước. Điều này sẽ giúp người dùng hiểu những gì thực sự đang xảy ra. Điều này trông giống như một mã gian lận có thể làm cho mọi thứ hoạt động một cách kỳ diệu, nhưng kết quả có thể là thảm hại trong một số trường hợp.
Ashwani Agarwal

Vui lòng đọc kỹ câu hỏi, người được yêu cầu chỉ có một bảng, phương pháp của bạn sẽ khôi phục tất cả các lần di chuyển và sau đó tạo tất cả các bảng. Cũng php artisan migration:refreshphục vụ như nhau.
Wajahat Hashmi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.