Laravel 5.2 Eager加载多个一级到关系

时间:2016-02-05 15:07:45

标签: php laravel-5

我是laravel的新手,我使用的是Laravel 5.2我希望获得用户特定帖子的所有评论。我的表就像:

User
-----
id

public function posts() {
   $this->hasMany( 'App\Posts' )
}

Post
------
id
user_id

public function user() {
   $this->belongsTo( 'App\User' )
}

public function comments() {
   $this->hasMany( 'App\Comment' )
}

Comments
----------
id
post_id

public function post() {
   $this->belongsTo( 'App\Post' )
}

现在我想要的是获得一个特定用户的所有帖子说登录用户。我可以通过很长的方式获得所有评论:

$comments = [];
foreach( Auth::user()->posts as $post) {
    foreach( $post->comments as $comment ) 
    {
       $comments[] = $comment->title
    }
}

但是我想知道如何在不使用关系的情况下使用这些循环来获取注释。提前谢谢。

2 个答案:

答案 0 :(得分:0)

基本上,您希望使用with()和点符号急切加载

$user = User::with('posts.comments')->find(Auth::user()->id);

如果您只想要评论,可以这样做:

$user = User::with('comments')->find(Auth::user()->id); 
$comments = $user->comments();

答案 1 :(得分:0)

您可以将现有用户对象的关系加倍:

$posts = \Auth::user()->posts()->with('comments')->get();

它适用于所有级别。

在我的项目中,我的组织与客户有一个链接表到治疗师,所有多个,这是有效的:

Organization::find(1)->clients()->with('therapists')->get();

所以你的情况也应该有效。让我知道。