gpt4 book ai didi

mysql - 如何在 Laravel 5 中的一对多关系中仅查询一个外部行

转载 作者:行者123 更新时间:2023-11-29 10:44:40 25 4
gpt4 key购买 nike

我有 4 个模型:postsuserscategoriesuserCategories

帖子-用户具有一对多关系(一个帖子属于一个用户)。

帖子-类别具有一对多关系(一个帖子属于一个类别)。

users-userCategories 具有一对多关系(一个用户有多个 userCategories)。 userCategory 有一个 rank 字段,用于保存用户在特定类别中的表现。

我用这个查询一些帖子:

$posts = Post::with(array('user.userCategories')
)
->where('category_id', '=', $category_id)
->get();

评估帖子后,我尝试获取该帖子类别的用户 userCategory rank

$rank_of_the_post_owners = array();
foreach($posts as $post)
foreach($post->user->userCatergories as $userCategory)
if($userCategory->id == $post->category_id) {
$rank_of_the_post_owners [$post->id] = $userCategory->rank;
break;
}
}
}

为了摆脱上面的代码,我只想查询相关的 userCategory (对于帖子的类别)。因此,我想访问诸如 user.userCategory->rank 这样的排名信息,而不是循环。

我怎样才能做到这一点?

最佳答案

当使用with()时,您可以通过使用闭包作为值来约束关系,并且由于您已经拥有$category_id,您可以执行以下操作:

$posts = Post::with(['user.userCategories' => function ($query) use ($category_id) {
$query->where('userCategories.id', $category_id);
}])
->where('category_id', '=', $category_id)
->get();

然后,如果您愿意,可以添加一个访问器来获取帖子的排名:

public function getRankAttribute()
{
return $this->user->userCategories->sum('rank');
}

因此,要获得排名,您只需要:

$posts->first()->rank;

https://laravel.com/docs/5.4/eloquent-mutators#accessors-and-mutators

希望这有帮助!

关于mysql - 如何在 Laravel 5 中的一对多关系中仅查询一个外部行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44842358/

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