Laravel MySQL 按计数排序

2024-05-14

我正在使用 Laravel 和 MySQL,并且我有一个表post代表用户可以评论的帖子,现在我想按照每个帖子的评论数量按升序/降序对帖子进行排序,我该如何在 Laravel 中执行此操作?我不想添加字段post表来跟踪每个帖子的评论数量,因为每次添加/删除评论或评论的评论时手动更新该字段会让我发疯......

这就是我创建我的posts表和comments table:

Schema::create('posts', function($table) {
    $table->increments('id');
    $table->string('title', 100)->unique();
    $table->string('content', 2000);
    $table->timestamps();
});
Schema::create('comments', function($table) {
    $table->increments('id');
    $table->string('content', 2000);
    $table->unsignedInteger('post_id');
    $table->foreign('post_id')->references('id')->on('posts')->onDelete('cascade')->onUpdate('cascade');
    $table->unsignedInteger('parent_id')->nullable();
    $table->foreign('parent_id')->references('id')->on('comments')->onDelete('cascade')->onUpdate('cascade');
    $table->timestamps();
});

这就是我在帖子模型中设置帖子和评论之间关系的方法:

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

在评论模型中:

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

您可以按照您所展示的那样进行操作,但现在您可以从数据库中获取所有条目。如果您有 100 个帖子,每个帖子有 100 条评论,那么您将从数据库中获得 10000 行,只是为了对您的帖子进行排序(我假设您不想在排序时显示这些评论)。

您可以添加到您的 Post 模型中:

public function commentsCountRelation()
{
    return $this->hasOne('Comment')->selectRaw('post_id, count(*) as count')
        ->groupBy('post_id');
}

public function getCommentsCountAttribute()
{

    return $this->commentsCountRelation ?
        $this->commentsCountRelation->count : 0;
}

现在你可以使用:

$posts = Post::with('commentsCount')->get()->sortBy(function($post) {
    return $post->comments_count;
});

升序排序或

$posts = Post::with('commentsCount')->get()->sortBy(function($post) {
    return $post->comments_count;
}, SORT_REGULAR, true);

降序排序。

顺便说一下使用sortBy然后reverse这不是一个好主意,您应该使用参数来排序,正如我所展示的

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Laravel MySQL 按计数排序 的相关文章

  • 使用 Laravel Eloquent 获取所有最新记录

    我尝试以这种方式查询数据库 但它返回错误 未找到最新 DailyReport get gt latest gt paginate 10 我希望它返回所有带分页的每日报告 The latest 方法是缩写orderBy created at
  • Laravel 5 配置语言环境,不起作用

    已完成的修改 on 配置 应用程序 php locale gt env APP LOCALE en fallback locale gt en on env APP LOCALE pt 我也复制了 资源 lang en文件到 资源 lang
  • Laravel 5.1 Snappy pdf 图像未在 pdf 文件中呈现

    我在用barryvdh laravel snappy生成pdf文件 我有两个图像文件 1 yourlogohere png 位于 public image 文件夹中 2 logo2 png 位于 public app logo 以外的文件夹
  • Laravel 5 Eloquent 在多个级别上将关系附加到 JSON

    因此 在模型中包含关系非常容易 例如 class User extends Model protected with roles class Role extends Model protected with permissions 当有对
  • Laravel 内存问题?

    各位 我在 DO 服务器上遇到这样的问题 我已经尝试了一切 整个网站在使用 Homestead 的 Linux 服务器上 100 正常工作 但上传后 它只能工作一次 在重新加载或刷新页面后会多次下降 我尝试增加 apache 服务器的内存
  • 创建日期 - Laravel 中的 Carbon

    我开始阅读有关Carbon并且似乎不知道如何创建一个carbon date 在文档中说你可以 Carbon createFromDate year month day tz Carbon createFromTime hour minute
  • Laravel 中的 SQL 运算符是什么?

    我正在查看 Laravel 的源代码 发现了很多 Eloquent 的 SQL 运算符 我想知道其中一些是什么以及如何使用它们 不幸的是我没有找到任何文档 这是我找到的运营商vendor laravel framework src Illu
  • 如何在此查询中获取以 KM 为单位的距离

    salons Salon select salons gt selectRaw 6371 acos cos radians cos radians lat cos radians lng radians sin radians sin ra
  • Laravel 5.1 - 获取当前路线

    我正在开发一个为每个视图自动获取资源 css js 的函数 所以它工作得很好 让我们说 http mywebsite com displayitems http mywebsite com displayitems home about 等
  • Laravel 4 - JOIN - 相同的列名

    我目前使用此代码从数据库中检索所需的数据 query DB table packages gt join assigned packages function join use id join gt on packages id assig
  • htmlspecialchars() 期望参数 1 为字符串,Laravel 中给出的数组

    我的程序中出现了这个错误Laravel刀片模板 htmlspecialchars 期望参数 1 为字符串 给定数组 我尝试将数组转换为刀片模板中的字符串 这是代码 Where silderImageDataArray是这里存储的变量和值 这
  • 开发中的 Laravel 和视图缓存——无法立即看到变化

    我和一些朋友决定开始一个项目 我们偶然发现了 Laravel 并认为它可能是一个很好的工具 我们开始在本地使用它来开发一些页面 并注意到一些奇怪的事情 当我们用不同的信息更新视图时 大约需要 5 到 10 分钟视图信息才会发生变化 这就像
  • 使用 AJAX 时 Laravel 会话 cookie 未加密

    我即将为我的应用程序创建一个单点登录界面 另一个应用程序发送 AJAX POST 请求 我对用户进行身份验证并返回响应 正在设置会话 cookie 但未加密 相关守则 user User where email email gt first
  • 使用 Laravel 返回一对多 Eloquent 关系中的最后一条记录

    假设存在一个One To Many关系 其中用户有许多工作 以及最后一条记录job表是用户当前的作业 让用户返回上一份工作的更好方法是什么 这是我尝试过的 User Class public function ejob return thi
  • SQL Server中根据条件进行计数

    有谁知道如何在 SQL Server 中根据条件进行计数 Example 如何对表中名称为 system 的记录以及 CaseID 记录总数进行列计数 顾客表 UserID CaseID Name 1 100 alan 1 101 alan
  • Laravel 5.3:从存储中删除图像

    我有一种方法可以删除产品和属于它的图像 但我无法删除该图像 我这哪里出错了 public function deleteProduct ids foreach ids as id gt value product Product find
  • Laravel 调度程序不会自动运行

    我做了一个调度程序 当我用php artisan userRanking有用 这是代码中的Kernel php protected commands App Console Commands UserRanking class protec
  • 如何将 Laravel 连接到 Firebase

    我正在使用 Laravel 和 Firebase 我需要将 Laravel 连接到 Firebase 但遇到此错误 调用未定义的方法 Kreait Firebase Factory getDatabase
  • Laravel 5.2 中使用多个 MySQL 数据库连接查询关系存在

    我正在处理以下情况 我有两个模型 一个Employee with id and name字段和一个Telephone with id employee id and flag字段 还有一个一对多关系在这两种模型之间 即一个员工可能拥有多部电
  • 使用 laravel 5 和 Auth 更新登录的用户帐户设置

    截至今天 我对 Laravel 实际上是任何 PHP 框架 还是个新手 但对 PHP 并不陌生 我创建了我的第一个项目并设法使用预构建的登录Auth系统 我创建了一个新的路线 控制器和模型 名为AccountSettings所以当我去 ac

随机推荐