2017-01-31 3 views
1

Это контроллер MessagesController:Laravel5: Не удается удалить из БД

public function destroy(Messages $id) 
{ 
    \DB::delete(
      'DELETE FROM messages WHERE id=' . $id 
     ); 
    return redirect()->route('messages.index')->with('message', 'Deleted.'); 
} 

Это routes.php:

Route::delete('messages.destroy', ['as' => 'messages.destroy', 'uses' => '[email protected]']); 

Это вид файла:

{!! Form::open(array('route'=>['messages.destroy',$message->id],'method'=>'DELETE')) !!} 
{!! Form::button('Delete',['class'=>'btn btn-danger','type'=>'submit']) !!} 
{!! Form::close() !!} 

Так , У меня есть ошибка:

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '[]' at line 1 (SQL: DELETE FROM messages WHERE id=[])

Я понимаю, что идентификатор отсутствует на контроллере. Как это решить?

P.S. Кроме того, попробовал, как это в контроллере:

public function destroy(Messages $message) 
{ 
    $message->delete(); 
    return redirect()->route('messages.index')->with('message', 'Deleted.'); 
} 

Это просто показывает сообщение Deleted. но это не удаление вещи.

ответ

1

Вот пример того, что я делаю:

маршруты/web.php:

Route::resource('products', 'Products'); 

контроллер:

public function destroy($id) 
{ 
     Product::destroy($id); 
     return redirect()->route('products.index') 
         ->with('success','Product deleted successfully'); 
} 

Вид:

{!! Form::open(['method' => 'DELETE','route' => ['products.destroy', $product->id],'style'=>'display:inline']) !!} 
{!! Form::submit('Delete', ['class' => 'btn btn-danger']) !!} 
{!! Form::close() !!} 
+0

эхо $ сообщение показывает скобки "[]" на этой странице. –

+0

и путь в браузере - «/messages.destroy?16». 16 является идентификатором объекта. –

+0

Возможно, это потому, что вы отправляете его как массив. Попробуйте это без массива в виде вашего лезвия: {!! Форма :: open ('route' => ['messages.destroy', $ message-> id], 'method' => 'DELETE') !!} {!! Form :: button ('Delete', ['class' => 'btn btn-danger', 'type' => 'submit']) !!} {!! Form :: close() !!} –

0

Попробуйте следующий маршрут:

Route::delete('messages.destroy/{id}', ['as' => 'messages.destroy', 'uses' => '[email protected]']); 

и этот контроллер:

public function destroy($id) 
{ 
    Message::destroy($id); 
    return redirect()->route('messages.index')->with('message', 'Deleted.'); 
} 
+0

Спасибо! Это работает! –

+0

рад слышать, что он работает :) –

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