2014-03-18 86 views
2

我是新來laravel所以原諒我可能noobish問題。另外,我也研究過所有其他'類似'的問題,但要麼他們沒有重現正確的解決方案,要麼我老實說很難將其解決。Laravel查詢用的hasMany關係

該場景:

我有一個Post模型和一個Subject模型。這是他們目前的樣子。

在post.php中

在Subject.php

public function subjects() { 
    return $this->belongsToMany('Subject', 'posts_subjects'); 
} 

現在

public function posts() { 
    return $this->belongsToMany('Post', 'posts_subjects'); 
} 

,我需要實現的是:

如果一個查詢參數傳遞給請求(即q =食物)我只想返回包含受試者關係中的主題食物的帖子,而不是其他人。如果沒有通過,則只需顯示一切......

這是我的PostsController的index動作看起來就像個大氣壓。

public function index() { 

    $q = Input::get('q'); 

    $posts = Post::all(); 

    return View::make('posts.index', ['posts' => $posts]); 
} 

我該怎麼做呢?將不勝感激一些幫助。 非常感謝

PS。我可以通過此代碼獲取所有帖子。

+0

我想你可能是如何的關係是工作有點混亂。單個帖子是否可以有很多主題(單個帖子是否可以與食品和旅行相關聯)? – user3158900

+0

使用數據透視表的多對多關係意味着在關係的兩邊使用'belongsToMany()'。 –

+0

是的,對不起。我做(做)有belongsToMany兩種型號..我只是改變了一些事情了一下週圍想我可能做錯了什麼,但問題仍然..我能得到的職位從主題模型,但因爲給定的主題我們談論的PostsController,感覺怪異立足於一個不同的模型.. –

回答

2

這是未經測試的代碼,但它可能會爲你工作,如果你只有一個由該查詢返回的主題:

public function index() 
{ 

    if($q = Input::get('q')) 
    { 
      if($subject = Subject::with('posts')->where('name', $q)->first()) 
      { 
       $posts = $subject->posts; 
      } 
      else 
      { 
       $posts = array(); 
      } 
    } 
    else 
    { 
     $posts = Post::all(); 
    } 


    return View::make('posts.index', ['posts' => $posts]); 
} 
+0

謝謝老兄整個返回值。這樣做:) –