2014-12-02 23 views
8

Tôi đang cố gắng cập nhật Người dùng trên cơ sở email không có id, có cách nào để thực hiện điều này mà không có truy vấn thô hay không.Truy vấn cập nhật Laravel

Hiện nay các lỗi

{ "lỗi": { "loại": "ErrorException", "message": "Tạo đối tượng mặc định từ giá trị rỗng ", "tập tin": "C : \ wamp \ www \ người nổi tiếng-jim \ ứng dụng \ controllers \ SignupController.php", "dòng": 189}}

Mã My

public function changeAccountStatus ($plan, $userEmail){ 
     $UpdateDetails = User::where('email', '=', $userEmail)->first(); 
     $UpdateDetails->member_type = $plan; 
     $UpdateDetails->save(); 
    } 
+0

Và những gì trong dòng '189'? –

Trả lời

5

Lỗi này sẽ gợi ý rằng User::where('email', '=', $userEmail)->first() trả về giá trị rỗng, thay vì vấn đề với việc cập nhật mô hình của bạn.

Kiểm tra xem bạn thực sự có Người dùng trước khi thử thay đổi thuộc tính trên đó hay sử dụng phương thức firstOrFail().

$UpdateDetails = User::where('email', $userEmail)->first(); 

if (is_null($UpdateDetails)) { 
    return false; 
} 

hoặc sử dụng phương pháp firstOrFail(), theres không cần phải kiểm tra xem người dùng là null vì điều này ném một ngoại lệ (ModelNotFoundException) khi một mô hình không được tìm thấy, trong đó bạn có thể bắt bằng App::error()http://laravel.com/docs/4.2/errors#handling-errors

$UpdateDetails = User::where('email', $userEmail)->firstOrFail(); 
4

Bạn có thể sử dụng Laravel query builder, nhưng đây không phải là cách tốt nhất để làm điều đó.

Kiểm tra Wader's answer below cho cách Eloquent - tốt hơn vì nó cho phép bạn kiểm tra xem có thực sự là người dùng khớp với địa chỉ email không và xử lý lỗi nếu không có.

DB::table('users') 
     ->where('email', $userEmail) // find your user by their email 
     ->limit(1) // optional - to ensure only one record is updated. 
     ->update(array('member_type' => $plan)); // update the record in the DB. 

Nếu bạn có nhiều trường để cập nhật, bạn chỉ cần thêm nhiều giá trị vào mảng đó ở cuối.

+0

Tôi đoán bạn không hiểu câu hỏi. Anh ấy muốn cung cấp email trong phương thức find() Eloquent và muốn nó khớp với cột emil –

+0

Tôi đã chỉnh sửa chú thích của mình –

+0

Tại sao bạn sử dụng Trình tạo truy vấn cho điều này khi op có thiết lập mô hình Eloquent? Vấn đề không phải là điều này không thể được thực hiện dễ dàng trong Eloquent, nhưng thực tế không có kiểm tra null trước khi cố gắng thiết lập các thuộc tính trên đối tượng (xem câu trả lời của tôi) – Wader

0

Hãy thử làm như thế này.

User::where('email', $userEmail)->update({'member_type' => $plan}); 
Các vấn đề liên quan