2013-03-25 30 views
18

Tôi cần phải cập nhật tất cả các hàng trong cơ sở dữ liệu để một trường cụ thể trong tất cả trong số chúng bằng một giá trị duy nhất. Đây là một ví dụ.Làm thế nào để thiết lập mọi hàng có cùng giá trị với Eloquent/Fluent của Laravel?

Hãy nói rằng bảng cơ sở dữ liệu của tôi là như vậy:

id | data | confirmed 
1  | someData |  0 
2  | someData |  1 
3  | someData |  0 

Tôi muốn thực hiện một truy vấn mà bộ lĩnh vực khẳng định của tất cả các hàng để 1.

tôi có thể làm điều đó theo cách này:

$rows = MyModel::where('confirmed', '=', '0')->get(); 
foreach($rows as $row) { 
    $row->confirmed = 0; 
    $row->save(); 
} 

Nhưng dường như có cách nào tốt hơn? Một truy vấn chỉ có thể nói "đặt trường 'xác nhận' của mỗi hàng thành 1."

Truy vấn như vậy có tồn tại trong Eloquent/Fluent của Laravel không?

Trả lời

37

Vâng, một câu trả lời dễ dàng: không, bạn không thể với tài hùng biện. Một mô hình đại diện cho 1 hàng trong cơ sở dữ liệu, nó sẽ không có ý nghĩa nếu họ thực hiện điều này.

Tuy nhiên, có một cách để làm điều này với thông thạo:

$affected = DB::table('table')->update(array('confirmed' => 1)); 

hoặc thậm chí tốt hơn

$affected = DB::table('table')->where('confirmed', '=', 0)->update(array('confirmed' => 1)); 
11

Bạn có thể làm điều này với elquent (laravel 4):

MyModel::where('confirmed', '=', 0)->update(['confirmed' => 1]) 
23

Chỉ cần giữ nguyên luồng này, bạn có thể cập nhật tất cả các hàng chống lại mô hình Eloquent trực tiếp bằng cách sử dụng:

Model::query()->update(['confirmed' => 1]); 
+0

Đây là những gì tôi đang tìm kiếm! Cảm ơn! –

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