gpt4 book ai didi

php - Laravel Eloquent ORM - 返回具有也属于第三个对象的对象的对象

转载 作者:行者123 更新时间:2023-12-04 04:55:12 25 4
gpt4 key购买 nike

首先,我从 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');
}
}

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

我需要查看评论者列表,然后找到对那个帖子发表评论的人。 (我真的不需要担心优化,因为它是一个带有小数据库的小型实验项目)

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

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

最佳答案

拥有

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

并在 View 中
@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

关于php - Laravel Eloquent ORM - 返回具有也属于第三个对象的对象的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16849959/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com