2013-05-31 28 views
2

首先,我以PHP和MVC框架开始,我还不是很擅长这一点,我也做不了很多的问题研究,因为我真的不知道如何将其翻译成谷歌搜索。Laravel Eloquent ORM - 返回也属于第三个对象的对象

和多数民众赞成也是为什么我的问题标题是太有趣了

好了,可以说我有三个型号:帖子,评论者和评论

的意见属于双方的帖子和评论者,所以我有这样的代码在我的模型,它的一切都很简单

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')将显示任何具有任何地方都有评论,但我认为那就是出发点。我也无法在文档中找到答案。

请让我知道,如果我没有做我的问题不够

+0

请为我们提供您的Commenter类。 –

+0

现在编辑所有的类 – XuxuBelezA

回答

1

我意识到不会是因为我想简单的方法,所以我决定去一个新的多对多关系...

我加

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

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

,现在我可以简单地使用

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

在我的控制器找我提意见

感谢名单帮助,ev回答的人。

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'])); 

并在视图

​​

或者你可以创建一个新的物业

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 
+0

但是,如果我这样做,它会列出同一作者两次,如果多于一个评论属于他。我需要首先查看评论者列表,然后找到属于该特定帖子的评论者。 – XuxuBelezA

+0

你说得对,但要解决这个问题,我只是在上面添加了一个group。我只是给你一些想法,并不真正解决你的问题,如果你认为你需要浏览评论列表,然后得到所有评论者,那么你可能需要编写更多的代码,查询为你做,或者在你的模型上创建一个新方法来获取评论者列表。 –

+0

groupBy方法可能实际上有帮助,感谢这个想法,但我仍然不知道它是否会为我做。为了创建这种新方法,我需要做些什么? – XuxuBelezA

相关问题