2015-04-12 29 views
11

Tôi mới dùng Laravel và tôi đang cố cập nhật bản ghi từ đầu vào của biểu mẫu. Tuy nhiên tôi thấy rằng để cập nhật bản ghi, trước tiên bạn cần lấy bản ghi từ cơ sở dữ liệu. Không phải là một cái gì đó có thể muốn cập nhật một kỷ lục (khóa chính được thiết lập):Bản ghi cập nhật hùng hồn của Laravel mà không tải từ cơ sở dữ liệu

$post = new Post(); 
$post->id = 3; //already exists in database. 
$post->title = "Updated title"; 
$post->save(); 

Trả lời

12

Bạn chỉ có thể sử dụng Query Builder hơn là hùng hồn, mã này trực tiếp cập nhật dữ liệu của bạn trong cơ sở dữ liệu :) Đây là một mẫu:

DB::table('post') 
      ->where('id', 3) 
      ->update(['title' => "Updated Title"]); 

Bạn có thể kiểm tra tài liệu vào đây để biết thêm thông tin: http://laravel.com/docs/5.0/queries#updates

+0

Cảm ơn một triệu .. Bạn đã làm cho ngày của tôi –

+0

@KuHyeSun Vui vì nó cũng phù hợp với bạn! Chúc mừng! –

+1

không bởi vì sau đó bạn mất dấu thời gian và hành vi mô hình khác của bạn – malhal

0

Trước tiên, bạn cần phải tải hàng để cập nhật:

$post = Post::find($id); 

tôi trường hợp của bạn

tài sản
$post = Post::find(3); 
$post->title = "Updated title"; 
$post->save(); 
+3

Ông không muốn chạy 'truy vấn select' trước khi cập nhật. – harrrrrrry

+0

@zairwolf: Không có gì sai trong câu trả lời này. Nó cũng là một cách tốt để lấy đối tượng bản ghi và cập nhật trường cụ thể. –

+2

Anh ấy muốn tránh tìm nạp bản ghi. Tôi đến đây vì tôi có một vòng lặp mà tôi muốn cập nhật một số hàng, tôi không thể có được hồ sơ, nó sẽ là quá lộn xộn và quan trọng nhất không hiệu quả – ggderas

14
Post::where('id',3)->update(['title'=>'Updated title']); 
+0

Đây là câu trả lời đúng. –

0

Bạn cũng có thể sử dụng firstOrCreate HOẶC firstOrNew

// Retrieve the Post by the attributes, or create it if it doesn't exist... 
$post = Post::firstOrCreate(['id' => 3]); 
// OR 
// Retrieve the Post by the attributes, or instantiate a new instance... 
$post = Post::firstOrNew(['id' => 3]); 

// update record 
$post->title = "Updated title"; 
$post->save(); 

Hy vọng nó sẽ giúp bạn :)

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