gpt4 book ai didi

laravel - 在 Laravel 中按总和列关系排序

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

我有这个 Controller ,它可以从帖子表中抓取帖子。posts 表中的每个帖子都与另一个表 likes 具有“hasMany”关系。

Controller :

public function getDashboard(){
$posts = Post::orderBy('created_at', 'desc')->get();

return view('dashboard', ['posts' => $posts]);
}

我想将“创建于”替换为:

$post->likes->sum(like)

虽然不知道如何编写正确的语法。

编辑:

这是表格。

Posts  
--id
--body
Likes
--id
--post_id
--like

like 列的值可以是 1 或 -1。我想订购每个帖子的该列的总和。因此,一个不喜欢(-1)和一个喜欢(1)的帖子的聚合值为 0,因此将放置在一个喜欢(1)的帖子之后。

最佳答案

您可以使用 withCount()为此:

Post::withCount('likes')->orderBy('likes_count')->get()

withCount() will place a {relation}_count column on your resulting models

更新

Post::withCount(['likes' => function($q) {
$q->where('like', 1)
}])
->orderBy('likes_count')
->get()

更新2

您可以使用 sortByDesc()将您的收藏排序为:

$posts = Post::get();

$posts = $posts->sortByDesc(function ($post) {
return $post->likes->sum('like');
});

关于laravel - 在 Laravel 中按总和列关系排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41209777/

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