2014-09-29 130 views
1

可以說我有2個表:關係,雄辯和加入

頁[ID,PARENT_ID,內容] 評論[ID,PAGE_ID,內容]

當我瀏覽的網頁我想顯示該頁面的所有評論對包含此頁面的頁面添加評論。

class Comment extends Eloquent 
{ 
    protected $table = "comments"; 

    public function page() 
    { 
     return $this->belongsTo('Page','page_id','id'); 
    } 
} 

class Page extends Eloquent 
{ 
    protected $table = "pages"; 

    public function comments() 
    { 
     return $this->has_many('Comment'); 
    } 
} 

$comments = new Comment(); 
$comments= $comments->where('page_id',$id)->with('page')->get(); 

我需要爲當前頁面的評論中,有當前頁面的父頁面,我想從頁表中的所有數據和註釋一起走,所以我可以打印出PAGE_ID /標題何體統對每個評論。

回答

0

我沒有測試過這一點,但理論上應該Laravel解析嵌套的關係,像這樣:

Page::where('page_id',$id)->with('comments','parent.comments')->get(); 

這是假設你在頁面模型中的「父」關係。

public function parent() 
{ 
    return $this->hasOne('Page','parent_id'); 
} 
+0

謝謝,這讓我更接近了,但我想評論是在同一個對象,所以我可以得到當前頁面或子頁面的最新評論加起來。現在,當我使用 - > latest()時,它獲得了最新的兩種(主頁和子頁面)。 – 2014-09-30 09:56:55

+0

然後我建議你引入一個單獨的類,它將所有評論對象統一起來,並將它們返回到一個Collection對象中(以便你可以調用latest()等)。您可以使用集合的遞歸遍歷(基本上遍歷集合中的所有對象,不受嵌套深度的影響,並檢查它是否是一個instanceof Comment),這些都是由我向您展示的查詢返回的。一個很好的例子可以在這裏看到:http://stackoverflow.com/questions/14245392/recursive-traversal-of-object – 2014-09-30 10:06:03