我正在尝试在Laravel 5中实现类别/ subreddit搜索,但我的查询没有得到任何结果。
我一直收到这个错误:
在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)
给出
我不明白为什么当同一查询在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']);
编辑:当我将$subreddit->id
替换为我正在查看的subreddit的id 24
时,我现在得到了正确的结果。为什么我无法在同一个控制器的$subreddit->id
方法中使用show()
?
答案 0 :(得分:2)
我假设你正在使用路由模型绑定。如果是,则没有理由从数据库重新加载subreddit。
在load
上致电$subreddit
至eager load your relationships:
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'));
}