2016-05-27 15 views
6

Tôi cần thêm cột mới trong Dự án laravel của mình, không có vấn đề gì cho điều này, tôi đã sử dụng Schema::table() để cập nhật và không sao. Bây giờ tôi cần tìm hiểu xem có bao nhiêu bản ghi tôi có trên bảng này và cập nhật với một số giá trị.Cập nhật bảng và thêm dữ liệu vào Laravel 5 Migration

Tôi có bảng Warrants:

Schema::create('warrant_grants', function(Blueprint $table) { 
     $table->increments('id'); 
     $table->integer('warrant_plan_id'); 
     $table->integer('shareholder_id'); 
}); 

Vì vậy, tôi đã tạo ra lĩnh vực mới với một tập tin di cư mới:

Schema::table('warrant_grants',function ($table){ 
     $table->string('name',100); 
    }); 

Bây giờ tôi cần phải cập nhật lĩnh vực này name trong bảng với một số giá trị , ví dụ nếu bảng có 100 bản ghi, thì tôi cần chèn vào mỗi hàng giá trị "Warrant-X" trong đó X là số bắt đầu từ 1 đến 100. Ví dụ:

Warrant-1, Warrant-2, .... Warrant-100.

Tôi đã dành hàng giờ tìm cách để thực hiện việc này bằng cách sử dụng Hạt nhưng tôi không tìm thấy. Vì vậy, về cơ bản tôi có hai câu hỏi:

  • Tôi có thể sử dụng Hạt giống trong Laravel 5 để cập nhật giá trị hay tôi có thể chèn chúng?
  • Tôi có thể tạo một số SQL bên trong Hạt giống (hoặc di chuyển) để thực hiện cập nhật này cho tôi không?
+0

Bạn có thể cập nhật giá trị khi di chuyển. –

Trả lời

5

Có, bạn có thể thực hiện cập nhật/chèn/bất cứ điều gì trong di chuyển của bạn. Ví dụ:

Schema::table('warrant_grants', function($table) { 
    $table->string('name', 100); 
}); 

$i = 1; 
foreach (WarrantGrants::all() as $warrant_grant) { 
    $warrant_grant->update([ 
     'name' => 'Warrant-' . $i 
    ]); 

    $i++; 
} 
3

Dựa vào liên kết này tôi tìm thấy câu trả lời: https://stackoverflow.com/a/23506744/4650792

Schema::table('warrant_grants',function ($table){ 
     $table->string('name',100)->after('id')->nullable(); 
    }); 

    $results = DB::table('warrant_grants')->select('id','name')->get(); 

    $i = 1; 
    foreach ($results as $result){ 
     DB::table('warrant_grants') 
      ->where('id',$result->id) 
      ->update([ 
       "name" => "Warrant-".$i 
     ]); 
     $i++; 
    } 

Thanks for the help nào chàng trai.

2

Câu trả lời khác là chính xác. Nhưng lưu ý rằng nếu bạn có nhiều bản ghi, việc cập nhật tất cả chúng bằng ORM có thể mất thời gian. Sử dụng các truy vấn SQL thô để làm điều đó nhanh hơn.

Schema::table('warrant_grants',function ($table){ 
     $table->string('name',100)->after('id')->nullable(); 
    }); 
DB::raw("UPDATE warrant_grants SET name=name+id"); 

Truy vấn SQL không chính xác và bạn phải thực hiện truy vấn này cho DB của riêng bạn, nhưng bạn có được điểm.

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