【问题标题】:Laravel 5 sorting by most count child recordLaravel 5按最多计数子记录排序
【发布时间】:2016-02-19 21:24:41
【问题描述】:

我有两个表格 Quiz 和 quiz_results。

so Quiz hasMany('App\QuizResult')
and QuizResult belongsTo('App\Quiz')

在我的控制器中我可以查询

$top_quiz = Quiz::with('quiz_results')->limit(10)->get();

在我看来我可以做到这一点

{{ $top_quiz->quiz_results()->count() }}

这将显示 quiz_result 中属于 quiz 的记录总数。

例子

quiz_id | quiz_result_count (this is the total # of quiz_result of quiz table, this i want to sort)
1       |   3
2       |   2
3       |   3
4       |   5

问题是我将如何 orderBy 或按 $top_quiz->quiz_results()->count() 排序?

【问题讨论】:

  • 没有得到你想要的。?
  • 您可以使用收集方法对测验结果进行排序:$top_quiz->quiz_results()->sort()
  • 我想对 $top_quiz->quiz_results()->count() 的结果进行排序...这意味着计算 quiz_result 中的总记录数,然后排序到最多记录数跨度>
  • 你能举个例子吗?
  • 测验::with('quiz_results' => function($query){ $query->count(); })->limit(10)->get()->sortBy(' quiz_result')->all();尝试这个。虽然没有测试。我在手机上

标签: php laravel laravel-5


【解决方案1】:

对测验结果进行排序:

Quiz::with(['quiz_results' => function($query) { $query->count(); }])->get()->take(10)->sortBy('quiz_results')->all();

【讨论】:

  • 顺便说一句,因为这是集合, ->limit(10) 不会得到排序的集合,它应该是 ->get() 之后的 ->take(10).. 谢谢
【解决方案2】:

文档是你的朋友。

https://laravel.com/docs/5.2/queries#ordering-grouping-limit-and-offset

$top_quiz = Quiz::with('quiz_results')->orderBy('grade', 'desc')->limit(10)->get();

【讨论】:

    猜你喜欢
    • 2017-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-24
    • 1970-01-01
    • 2011-04-21
    相关资源
    最近更新 更多