2

首先,我从 php 和 MVC 框架开始,我仍然不是很擅长这个,我也无法对这个问题做很多研究,因为我真的不知道如何将它翻译成谷歌搜索。

这也是为什么我的问题标题如此有趣

好的,假设我有三个模型:帖子、评论者和评论

评论既属于帖子也属于评论者,所以我的模型中有这段代码,这一切都很简单

class Post extends Eloquent {

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

...

class Commenter extends Eloquent {

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

...

class Comment extends Eloquent {

    public function commenter () { 
        return $this->belongsTo('Commenter');
    }

    public function post () {
        return $this->belongsTo('Post');
    }
}

然后我想要一个查询来列出评论者,前提是他们对给定的帖子有评论

我需要浏览评论者列表,然后找到拥有属于该帖子的评论的人。(我真的不需要担心是最优的,因为它是一个带有小型数据库的小型实验项目)

我不知道如何使用控制器将其传递给视图,Commenter::has('comments')将在任何地方显示任何有评论的人,但我认为这是起点。我也无法在文档中找到答案。

如果我的问题不够清楚,请告诉我

4

2 回答 2

2

class Comment extends Eloquent {

    public function commenter () { 
        return $this->belongsTo('Commenter');
    }

    public function post () {
        return $this->belongsTo('Post');
    }
}

class Commenter extends Eloquent {

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

}

class Post extends Eloquent {

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

}

你可以

$post = Post::find($givenPostID);

View::make('posts.comments.listCommenters')
  ->with('commenters', $post->comments()->groupBy('commenter_id')->get(['commenter_id']));

在视图中

@foreach($comments as $comment)
  Author: <strong>{{$comment->commenter->name}}</strong>
@endforeach

或者您可以创建一个新属性

class Post extends Eloquent {

    public function getCommentersAttribute()
    {
        $comments = $this->comments;

        foreach($this->comments as $comment)
        {
           /// do whatever you need to grab your list of commenters        
        }

        return $yourListOfCommenters
    }

}

然后您只需在需要的任何地方引用它:

$post->commenters
于 2013-05-31T05:46:06.560 回答
1

我意识到不会有我想要的那么简单的方法,所以我决定建立一个新的多对多关系......

我添加了

public function posts () {
    return $this->belongsToMany('Post');
}

public function commenters () {
    return $this->belongsToMany('Commenter');
}

现在我可以简单地使用

->with ('commenters', Post::find($post_id)->commenters()->get())

在我的控制器中找到我的评论者列表

感谢大家的帮助,所有回答的人。

于 2013-06-01T01:17:52.093 回答