gpt4 book ai didi

laravel-4 - Laravel 4.1 热切加载带约束的嵌套关系

转载 作者:行者123 更新时间:2023-12-02 22:13:28 24 4
gpt4 key购买 nike

我正在尝试让带有约束的急切加载嵌套关系发挥作用。每个人似乎都给出了相同的渴望加载嵌套关系的例子:

$users = User::with('posts.comments')->get();

我想做的是获取与给定 id 的帖子相关的所有用户。但同时,我也想获得与该帖子相关的评论。

在4.1中,我要实现后者,我可以这样做:

$comments = Comment::whereHas('post', function($query) { $query->whereId(1); })->get();

有没有办法将两者结合起来并限制嵌套关系?

最佳答案

其实发现比想象的简单很多。

给定这些模型:

class User extends \Eloquent {

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

public function comments()
{
return $this->hasManyThrough('Comment', 'Post');
}

}

class Post extends \Eloquent {

public function user()
{
return $this->belongsTo('User');
}

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

}

class Comment extends \Eloquent {

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

}

然后我们可以获取具有给定帖子的用户,如下所示:

$userId = 2; $postId = 5;
$user = User::with(['comments' => function($q) use($postId) { $q->where('post_id', $postId); }])->find($userId);

这在使用 get() 时不起作用,因为它不会将用户限制为仅与给定帖子相关的用户。但这没关系,因为我们只对 post_id $postId 的单个帖子感兴趣。由于一篇文章只属于一个用户,因此我们不必担心其他用户。因此,我们可以使用 find() 或 first() 来获取实际结果。

此外,“中间”关系(即“post”)会自动返回,我们可以通过执行以下操作来获取它,而不必像之前的答案中建议的那样使用额外的“with”:

var_dump($user->posts);

关于laravel-4 - Laravel 4.1 热切加载带约束的嵌套关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22868362/

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