2016-03-28 70 views
1

我正在laravel中構建論壇。我想用它的主題列出了每個論壇類別像這樣:如何在Laravel中列出論壇類別及其主題

Category 1 
    -Topic 1 
    -Topic 2 
    -Topic 2 
Category 2 
    -Topic 1 
    -Topic 2 
    -Topic 3 
But I am getting this in stead 
Category 1 
    -Topic 1 
Category 2 
    -Topic 1 

這是我的選擇查詢,在我的控制器

$this->categories = DB::table('forum_categories') 
     ->leftjoin('forum_topics','category_id','=','forum_categories.id') 
     ->leftjoin('forum_posts','topic_id','=','forum_topics.id') 
     ->orderby('category_name','ASC') 
     ->get(); 

這是我Forum_categories模式

public function forum_post() 
    { 
    return $this->hasMany('App\Forum_topic','category_id'); 
    } 

我的Forum_topic模型

public function post() 
    { 
     return $this->hasMany('App\Forum_post','id'); 
    } 
Forum_post model 
public function topic() 
    { 
     return $this->belongsTo('App\Forum_topic','id'); 
    } 

我也嘗試加入類似結果的左連接。任何援助請。

我的觀點

@foreach($categories as $category) 
<h2> {{$category->category_name}}</h2> 
-<p>{{$category->topic_subject}}</p> 
@endoforeach 

回答

0

主題實際上應該在這種情況下,belongsToMany('App\Forum_topic', 'id');關係。

另外,使用Eloquent代替它,這是一個更清潔更強大的解決方案。

  1. 確保您Models延伸Eloquent
  2. 如果您的表名稱不匹配型號,在你的類thussly聲明它:`$保護表=「MY_TABLE」;
  3. 添加protected $with = ['topic'];

現在您的分類查詢將始終包含其 主題的連接,這樣就可以像這樣訪問:

$category->topics 
+0

感謝您的答覆。對不起,我只是貼了我的一部分模型。我所有的模型都擴展了雄辯。我的模型和它們所代表的表格的命名是可以的。例如,Forum_category模型指向forum_categories表。也感謝我指出了我在Forum_post模型中犯的錯誤。但結果仍然是一樣的。每個類別下只列出一個主題。 – wafutech

+0

好吧,你的數據現在就是這種情況。 – Ohgodwhy

+0

但是爲什麼。某些類別擁有多個主題,但只顯示一個主題。我試圖在每個類別中使用另一個foreach循環,但不幸的是,這沒有奏效。有些東西出錯了,但我不知道是什麼。 – wafutech