2016-03-20 15 views
7

Giả sử, tôi có nhiều tệp di chuyển đang cập nhật một bảng.Di chuyển Laravel - nhiều lần di chuyển (tệp) trong một lần

ví dụ:

 
2016_03_20_072730_create_tasks_table.php 
2016_03_20_075467_create_tasks_table.php 

... từ repo bởi các thành viên khác trong nhóm. Mỗi điều chỉnh một cái gì đó trong bảng, ví dụ: thêm cột.

Khi tôi cố gắng:

php artisan migrate

tôi nhận được lỗi:

 
PHP Fatal error: Cannot declare class CreateTasksTable, because the name is 
eady in use in U:\www\b10\database\migrations\2016_03_20_072737_create_tasks_ 
le.php on line 30 


    [Symfony\Component\Debug\Exception\FatalErrorException] 
    Cannot declare class CreateTasksTable, because the name is already in use 

Làm thế nào nên một thỏa thuận với tình hình như đã mô tả ở trên không?

EDIT

Đây là mã:

2016_03_20_072730_create_tasks_table.php:

 
class CreateTasksTable extends Migration 
{ 
    /** 
    * Run the migrations. 
    * 
    * @return void 
    */ 
    public function up() 
    { 
     Schema::table('tasks', function ($table) 
     { 
      $table->string('task1'); 
     }); 
    } 

    /** 
    * Reverse the migrations. 
    * 
    * @return void 
    */ 
    public function down() 
    { 
     Schema::drop('tasks'); 
    } 
} 

2016_03_20_075467_create_tasks_table.php:

 
class CreateTasksTable extends Migration 
{ 
    /** 
    * Run the migrations. 
    * 
    * @return void 
    */ 
    public function up() 
    { 
    Schema::table('tasks', function ($table) 
     { 
      $table->string('task2'); 
     }); 
    } 

    /** 
    * Reverse the migrations. 
    * 
    * @return void 
    */ 
    public function down() 
    { 
     Schema::drop('tasks'); 
    } 
} 

Trả lời

7

Mỗi di cư phải có một tên lớp duy nhất. Đổi tên cái thứ hai thành cái gì đó hợp lý hơn, chẳng hạn như 2016_03_20_075467_add_task2_to_tasks_tableAddTask2ToTasksTable, sau đó chạy composer dump-autoload để làm cho Laravel tìm thấy những thay đổi. Bây giờ bạn có thể di chuyển.

Chỉnh sửa: Bây giờ cả hai mã di chuyển đã được chỉnh sửa thành câu hỏi, tôi có thể thấy rằng lần di chuyển đầu tiên có cùng một vấn đề và phải được đổi tên theo cùng một cách. Có thể có một lần tạo đầu tiên khi di chuyển trở lại. Bạn nên ngừng đặt tên cho việc chỉnh sửa di chuyển bất kỳ thứ gì với create, vì bạn không thực sự tạo bảng.

+0

Có, tôi đã đến cùng một kết luận từ lỗi, nhưng di chuyển được cho là lớn hơn rất nhiều so với làm DB bằng tay. Giả sử bạn chỉ nên lấy repo mới nhất, chạy di chuyển và có một ly bia. Nhưng với điều này, có vẻ như các bản cập nhật bằng tay không xa phía sau "điều siêu tốt nhất kể từ khi cắt lát bánh mì";) Bây giờ, bạn phải điều chỉnh tệp di chuyển, kết hợp các tệp di chuyển hoặc di chuyển từng đến tạm thời và sử dụng - -xây, vâng, tôi đoán đó là một quả chanh. Lotsa nói, ít xử lý. Trừ khi có một cách dễ dàng - do đó câu hỏi của tôi. – Jeffz

+0

Thật dễ dàng - bạn chỉ cần đặt tên cho di chuyển của mình một cách hợp lý. Bạn không phải làm bất cứ điều gì trong cơ sở dữ liệu. Hãy đặt nó theo cách này: nó thực sự dễ dàng để làm việc với các mô hình là tốt. Nhưng nếu bạn cố gắng đặt tên cho hai mô hình giống nhau, nó sẽ không hoạt động. Bạn có cho rằng làm cho các mô hình khó làm việc với không? :) Chỉ cần dạy cho các thành viên trong nhóm của bạn để cung cấp cho các tên khác nhau để di chuyển khác nhau và đó là nghĩa đen tất cả mọi thứ bạn cần. –

+1

Tệp di chuyển được tạo tự động bởi Laravel. Vì có một shortcut tạo nên Laravel có thể thêm một số chuỗi/băm ngẫu nhiên vào tên lớp không? Trừ khi có cái gì đó hét lên chống lại thủ tục này. Cảm ơn Joel vì đã dành thời gian. – Jeffz

Các vấn đề liên quan