2016-12-01 5 views
0

Я пытаюсь обновить свои данные в БД, но я все время получаю сообщение об ошибке.Laravel Call to undefined method

Вызов неопределенной метод Осветите \ Database \ Query \ Builder :: сохранить()

Вот мой код:

public function postTodo(Request $request){ 
    if ($request->input('action') == 'set_as_done'){ 
     $thing = DB::Table('todo')->where('id', $request->input('id')); 
     if ($thing){ 
      $thing->done = $request->input('set_as_done'); 
      $thing->save(); 
     } 
     return redirect(route('admin.todo')); 
    } 
} 

ответ

0

сохранить метод работает на модели красноречивы не на строителя так ваш код должен запускать запрос на обновление вместо сохранения.

Я бы предложил создать модель Eloquent todo, а затем написать код с помощью метода save(), который имеет больше смысла, чем u петь строитель

public function postTodo(Request $request){ 
    if ($request->input('action') == 'set_as_done'){ 
     $thing = DB::table('todo')->where('id', $request->input('id'))->first(); 
     if ($thing){ 
      DB::table('todo')->where('id', $request->input('id'))->update([ 
       'set_as_done' => $request->input('set_as_done') 
      ]); 
     } 
     return redirect(route('admin.todo')); 
    } 
} 
1

Для $thing->save(), $thing должен быть экземпляр модели, которая простирается Model или Ardent.

Когда вы делаете $thing = DB::Table('todo')->where('id', $request->input('id')); переменная $thing - это коллекция, не имеющая отношения к модели.

Вы должны сделать модель Thing.php, то вы можете сделать это:

$thing = Thing::where('id', $request->input('id')); 
if ($thing){ 
    $thing->done = $request->input('set_as_done'); 
    $thing->save(); 
} 
0

Я хотел бы предложить вам создать модель для таблицы задач с использованием PHP мастеровых Марка: модель TodoModel.

<?php namespace App; use Illuminate\Database\Eloquent\Model; class Todo extends Model{ protected $table = 'todo'; } 

После этого вы можете использовать Todo для сохранения ваших данных.

public function postTodo(Request $request){ 
if ($request->input('action') == 'set_as_done'){ 
    $thing = Todo->find('id', $request->input('id')); 
    if ($thing){ 
     $thing->set_as_done = $request->input('set_as_done') 
     $thing->save(); 
    } 
    return redirect(route('admin.todo')); 
} 

}

Смежные вопросы