Laravel 关系,雄辩和连接
假设我有两张桌子: 页面[id,父项id,内容] 评论[id,页码,内容] 当我查看一个页面时,我希望显示该页面的所有注释,以及将此页面作为父页面的页面的注释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'); } }
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()等)。您可以使用我向您展示的查询返回的集合的递归遍历(基本上遍历集合中的所有对象,不考虑嵌套深度,并检查它是否为注释实例)来完成此操作。这里可以看到一个很好的例子: