2015-01-27 2 views
2

Я новичок в laravel, работая в небольшом проекте. У меня проблема с обновлением моей таблицы.Обновление Laravel не работает _method Неизвестный столбец

Мой редактировать поле

{{ Form::model($participantedit, array('method' => 'PATCH', 'route' => array('dota.update', $participantedit->idparticipant))) }} 
    <table border="0"> 
     <input type="text" name="participant_name" value="<?php echo $participantedit['participant_name']; ?>" /> 
     <li>{{ Form::submit('Update', array('class' => 'btn btn-info')) }}</li> 
{{Form::close()}} 

Моя функция Обновление

public function update($id){ 
    $input = Input::all(); 
    return Participant::where('idparticipant', '=', $id)->update($input); 
} 

Я получаю сообщение об ошибке, что столбец _method неизвестно.

+0

Я хотел бы также рекомендовать 'validate' ввод с [класса Validator] (http://laravel.com/ документы/4.2/проверки) –

ответ

4

Проблема в том, что Laravel автоматически добавляет поле _method к вашей форме. Это происходит потому, что формы HTML не поддерживают такие методы, как PATCH. Поэтому он отправляет поле _method со значением patch для поддержки других глаголов, чем просто POST и GET.

Что вы можете сделать, это использовать Input::except(). Она возвращает все входы, но удалить указанные те раньше:

$input = Input::except('_method'); 

Вы, вероятно, также необходимо исключить маркер CSRF:

$input = Input::except('_method', '_token'); 

В качестве альтернативы вы можете использовать Input::only(), который делает обратное:

$input = Input::only('foo', 'bar'); // foo and bar are values you actually want 
0

Вместо PATCH используйте PUT. Затем попробуйте поместить это в свою функцию обновления.

echo "<pre>"; 
print_r($input); 
echo "</pre>"; 
exit; 

См., Если вы получаете значения. Если вы получаете, то сохраните результат обновления в переменную типа:

$ response = Участник :: where ('idparticipant', '=', $ id) -> update ($ input);

затем снова напечатать это: (Чтобы найти, если есть какая-либо ошибка проверки)

echo "<pre>"; 
print_r($response->errors()); 
echo "</pre>"; 
exit; 
Смежные вопросы