Laravel 5:从具有路由问题的数据透视表中删除记录 - NotFoundHttpException

时间:2015-10-06 17:16:45

标签: php mysql laravel laravel-5 eloquent

我有一个页面,我可以将管理员添加到我的论坛类别(subreddit),我可以看到已分配的现有版主的列表。两者都在同一视图create.blade.php

在每个版主旁边,我都有一个删除链接,允许subreddit的所有者同时删除版主。

但是点击它时,请给我以下错误

  

RouteCollection.php第161行中的NotFoundHttpException

注意:为了访问添加版主的路线,我使用此subreddit/{id}/moderators/create

我理解我的路线可能是这里的问题,这些是我使用

的路线
Route::resource('subreddit', 'SubredditController');
Route::resource('subreddit.moderators', 'ModeratorsController');

这是ModeratorsController中的destroy()方法

public function destroy(Moderator $moderator, Subreddit $subreddit)
{
   $mod = Moderator::where('subreddit_id', '=', $subreddit->id)->where('user_id', '=', $moderator->id)->get();
   $mod->delete();
   return 'done';
}

这是视图中的删除链接

<a href="{{ action('ModeratorsController@destroy', [$moderator->id]) }}" class="btn btn-danger btn-xs"><span class="glyphicon glyphicon-remove"></span> Del</a>

我不认为以上action()会在这里工作,因为它会将subreddit_id替换为moderator.id,例如subreddit/2/moderator,其中2是主持人已取代17,这是我正在添加版主的subreddit的ID。

我也尝试过测试不同的路线,看看它是否有用,比如subreddit/{id}/moderators/{modid}/delete,但总是得到同样的错误。

1 个答案:

答案 0 :(得分:1)

当您使用resource时,您需要发送DELETE HTTP request

如果您使用nested resource,则需要同时发送$moderator->id$subreddit->id

在您的情况下,您需要使用a tag

form更改为delete method
{!! Form::open(['action' => ['ModeratorsController@destroy', $moderator->id, $subreddit->id], 'method' => 'delete']) !!}
  {!! Form::submit('Delete') !!}
{!! Form::close() !!}

你可能需要做一些改变才能破坏功能

public function destroy($subreddit_id, $moderator_id)
{
   $mod = Moderator::where('subreddit_id', $subreddit_id)
          ->where('user_id', $moderator_id)->first();
   $mod->delete();
   return 'done';
}

了解更多信息http://laravel.com/docs/5.1/controllers#restful-resource-controllers