Laravel 关系,雄辩和连接

Laravel 关系,雄辩和连接,laravel,laravel-4,eloquent,Laravel,Laravel 4,Eloquent,假设我有两张桌子: 页面[id,父项id,内容] 评论[id,页码,内容] 当我查看一个页面时,我希望显示该页面的所有注释,以及将此页面作为父页面的页面的注释 class Comment extends Eloquent { protected $table = "comments"; public function page() { return $this->belongsTo('Page','page_id','id'); } }

假设我有两张桌子:

页面[id,父项id,内容] 评论[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();

我需要当前页面的注释,当前页面作为父页面的页面,我希望页面表中的所有数据都与注释一起提供,这样我就可以打印出每个注释旁边的页面id/标题。

我还没有测试过这一点,但它应该像这样解析嵌套关系:

Page::where('page_id',$id)->with('comments','parent.comments')->get();
这是假设您在页面模型上有“父”关系

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

谢谢,这让我更接近了,但我希望评论在同一个对象中,这样我就可以得到当前页面或子页面的最新评论。现在当我使用->latest()时,它是最新的(主页面和子页)。然后我建议您引入一个单独的类来统一所有注释对象,并在集合对象中返回它们(以便您可以调用latest()等)。您可以使用我向您展示的查询返回的集合的递归遍历(基本上遍历集合中的所有对象,不考虑嵌套深度,并检查它是否为注释实例)来完成此操作。这里可以看到一个很好的例子: