2016-03-17 22 views
5

Tôi nhận được lỗi lạ này:Cột không tìm thấy: 1054 Unknown column '0' trong 'danh sách trường' - Laravel - Tôi không có một cột 0 bất cứ nơi nào trong mã của tôi

SQLSTATE[42S22]: Column not found: 1054 Unknown column '0' in 'field list' (SQL: update forum_threads set 0 = locked, 1 = 1, updated_at = 2016-03-17 16:01:59 where topic_id = 3 and forum_threads . deleted_at is null)

Điều là, tôi không có cột 0. Tôi không có mệnh đề where có mã số 0 ở bất kỳ đâu trong mã của mình. Tôi đang sử dụng một truy vấn phạm vi.

điều khiển của tôi là:

$action = $request->input('action'); 
    $topic = $request->input('topic'); 
    $thread = Thread::where('topic_id', $topic); 

    switch ($action) { 
     case ('locked'): 
      $thread->lock(); 
      break; 
    } 

Như bạn thấy, tôi không làm được gì nhiều. Tôi chỉ đang cố khóa một sợi chỉ. Tôi đang gọi phạm vi khóa trong mô hình Thread của tôi. Tôi có rất nhiều trường hợp chuyển đổi, một trong số đó là lock. Tôi đã chạy một nửa truy vấn ở trên cùng vì vậy tôi không phải lặp lại bản thân mình. Tôi chỉ lưu trữ nó trong biến số $thread để tôi có thể thực hiện các hành động như $thread->delete()$thread->restore().

phạm vi truy vấn của tôi trong mô hình Chủ đề:

public function scopeLock($query) 
{ 
    return $query->where('locked', 0)->update(['locked', 1]); 
} 

Vậy là xong. Tôi nghĩ rằng nó có thể bởi vì tôi có một điều khoản đi qua từ bộ điều khiển của tôi (Thread::where('topic_id', $topic)) và tôi chỉ tiếp tục nó vào phạm vi của tôi.

Mọi trợ giúp đều được đánh giá cao.

+1

'$ thread = Thread :: where ('topic_id', $ topic) -> first();' Hoàn tất truy vấn này và thử? –

+1

Ngoài ra, '-> cập nhật (['khóa' => 1]);' –

+0

Vẫn gặp lỗi tương tự. Và tôi có nhiều chủ đề, không chỉ là một chủ đề mà tôi sẽ chỉnh sửa để không hoạt động. –

Trả lời

16

Lỗi này là do ->update(['locked', 1]); mà nên ->update(['locked' => 1]);

chức năng cập nhật sử dụng một mảng là "cột" => "giá trị", lỗi cú pháp của bạn gây Laravel nghĩ [ 0 => 'locked', 1 => 1], vì vậy nó dịch để SQL này SET 0 = 'locked', 1 = 1 ...

+0

Haha, tôi đã tìm ra ngay trước khi quay lại để đăng câu trả lời. Bạn là người đầu tiên trả lời vì vậy tôi sẽ chấp nhận câu trả lời của bạn. Cảm ơn bạn! –

+0

@TaylorSwift Tôi đã trả lời câu hỏi này trong phần nhận xét. :/ –

+0

@JilsonThomas Tôi vừa nhận thấy rằng nhận xét thứ hai của bạn chỉ ra lỗi mà tôi đã thực hiện. Tôi không có ý tưởng rằng tôi đã thực hiện một lỗi trong phương pháp cập nhật của tôi. Ive upvoted answeraswell của bạn –

1

Như tôi đã đề cập trong phần bình luận, thay đổi chức năng của bạn như thế này:

public function scopeLock($query) 
{ 
    return $query->where('locked', 0)->update(['locked' => 1]); 
} 

Lưu ý những thay đổi trong phương thức cập nhật.

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