如何创建多对多关系3模型层4

时间:2013-06-03 06:16:44

标签: php laravel eloquent

我想知道如何从3个表创建关系。

这是我的模型结构:

用户模型

class User extends Eloquent { 
    public function Posts(){
        return $this->hasMany('Post');
    } 
    public function comments(){
        return $this->hasMany('comment');
    }
}


class Post extends Eloquent { 
    public function comments() {
        return $this->hasMany('Comments');
    } 
    public function user(){
        return $this->belongsTo('user');
    }    
}

class Comments extends Eloquent {  
    public function user(){
        return $this->belongsTo('user');
    }
    public function Post(){
        return $this->belongsTo('Post');
    } 
}

用户可以有很多帖子,每个帖子都有很多来自用户的评论。

我试图抓住发布评论的用户发布的所有评论

$comments = Post::find(1)->comments()->get();
foreach ($comments as $comment) {
    // here my code now to get the user
    $comment->user()->get()
}

结果:

[
       {
        id: "1",
        post_id: "1",
        user_id: "1", 
        reply_text: "Testing", 
       },...
]

我认为它根本没用。

我怎样才能使这更简单:

[
     {
        id: "1",
        post_id: "1",
        user_id: "1", 
        reply_text: "Testing", 
        user_post: {
            id: 1,
            name: "Edi vianika",
            profil_img: "l.jpg"
        }
    }
]

1 个答案:

答案 0 :(得分:0)

Phill的评论正确回答,正如他所说,你应该使用Eager Loading

$post = Post::with('comments', 'comments.user')->find(1);

然后你可以像这样迭代:

foreach ($post->comments as $comment) {
    echo $comment->user->name . ' said: ' . $comment->title;
}

为了清楚起见,我建议您将$comment->user关系命名为author,而输入$comment->author->name会很自然。你可以这样做:

class Comments extends Eloquent {

    public function author()
    {
        return $this->belongsTo('user', 'user_id');
    }
}

// Remember to change eager loading to 'comments.author'