我正试图在Laravel 5中实现类别/子reddit搜索,但我没有得到任何结果。
我一直得到这个错误:
在null上调用成员函数posts()
搜索路径我使用
Route::resource('subreddit', 'SubredditController');
Route::post('search', ['as' => 'search', 'uses' => 'SubredditController@search']);
当我搜索某个东西时,它会将我重定向到localhost/reddit/search
我希望它能重定向到localhost/reddit/subreddit/{id}/search
这是search()
在SubredditController
中的函数
public function search(Request $request, Subreddit $subreddit) {
$query = Input::get('search');
$subreddit = Subreddit::with('posts.votes')->with('moderators.user')->where('id', $subreddit->id)->first();
$posts = $subreddit->posts()->where('title', 'LIKE', '%' . $query . '%');
$posts->setPath($subreddit->id);
return view('subreddit.search', compact('query', 'subreddit', 'posts'));
}
dd($subreddit)
give null
我不明白为什么当相同的查询在show()
方法上工作时返回null。
RouteServiceProvider
$router->model('subreddit', 'App'Subreddit');
$router->model('posts', 'App'Post');
$router->model('moderators', 'App'Moderator');
我使用的路由
Route::resource('posts', 'PostsController');
Route::resource('votes', 'VotesController');
Route::resource('subreddit', 'SubredditController');
Route::resource('subreddit.moderators', 'ModeratorsController');
Route::get('mysubreddits', [
'as' => 'mysubreddits',
'uses' => 'SubredditController@mySubreddits'
]);
Route::post('search', ['as' => 'search', 'uses' => 'SubredditController@search']);
编辑:所以我现在得到正确的结果,当我用24
替换$subreddit->id
,这是我正在查看的子reddit的id。为什么我不能使用$subreddit->id
,而我可以在同一控制器的show()
方法?
我假设你正在使用路由模型绑定。如果你是,没有理由从数据库中重新加载你的subreddit。
在$subreddit
上调用load
来加载你的关系:
public function search(Request $request, Subreddit $subreddit)
{
$query = $request->input('search');
$subreddit->load(['posts.votes', 'moderators.user']);
$posts = $subreddit->posts()->where('title', 'LIKE', '%'.$query.'%')
->paginate()->setPath($subreddit->id);
return view('subreddit.search', compact('query', 'subreddit', 'posts'));
}