2015-10-11 61 views
0

)我試圖在Laravel 5中實現一個category/subreddit搜索,但我沒有得到任何結果與我的查詢。在Laravel中實現搜索:調用成員函數null(

我不斷收到此錯誤:

Call to a member function posts() on null

搜索路線我使用

Route::resource('subreddit', 'SubredditController'); 
Route::post('search', ['as' => 'search', 'uses' => '[email protected]']); 

當我尋找的東西它重定向我localhost/reddit/search

我很樂意,如果它可以重定向到localhost/reddit/subreddit/{id}/search

這是012在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')); 
} 

功能給空

我不明白爲什麼它返回null時相同的查詢工作於show()方法。

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' => '[email protected]' 
]); 
Route::post('search', ['as' => 'search', 'uses' => '[email protected]']); 

編輯:所以我現在得到正確的結果,當我24取代$subreddit->id這是我版(Subreddit)的id正在觀看。爲什麼我無法使用$subreddit->id,而我可以在相同控制器的show()方法中使用?

回答

2

我假設你正在使用路由模型綁定。如果你是,沒有理由從數據庫重新加載你的subreddit。

呼叫load$subredditeager 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')); 
} 
+0

謝謝,我停止接受任何錯誤和搜索視圖加載,但沒有任何結果。沒有搜索結果,甚至沒有subreddit名稱。這就是我如何顯示subreddit名稱'{{$ subreddit-> name}}''以及如何遍歷帖子'@foreach($ posts as $ post)',但它都是空的。 – Halnex

+0

@Halnex - 你在使用路由模型綁定嗎?你得到什麼'dd($ subreddit-> id)'? –

+0

是的,我正在使用路由模型綁定。當我dd($ subreddit-> id)時,我得到'null' – Halnex

相關問題