【问题标题】:How can i count registers from a table on laravel?我如何从 laravel 的表格中计算寄存器?
【发布时间】:2019-01-02 17:36:16
【问题描述】:

我正在尝试使用 Laravel 计算我的表中存在的每种类型的寄存器总数,但我不知道该怎么做。我是 Laravel 的新手。

我的桌子上有 2 种类型,有一个枚举(赢和输),我想计算我有多少。你能帮帮我吗?

【问题讨论】:

  • 你能详细解释一下你的问题吗?你想从一张桌子上得到赢和输的数量吗?
  • 是的,我想在刀片中显示我有多少个示例:Wins 10 Lost 7
  • 你的模型和列名是什么?
  • Projects.php 项目

标签: mysql laravel laravel-5 eloquent


【解决方案1】:

如果您使用 Eloquent 模型,您可以简单地在控制器中按列计数,

$winCount = YourModel::where('columnName','Win')->count();
$lostCount = YourModel::where('columnName','Lost')->count();

并将这些值传递给您查看。

【讨论】:

    【解决方案2】:

    您可以使用分组方式

    select count(id), enum
    from [yourTable]
    group by enum
    

    或者使用 Laravel Eloquent:

    [YourModel]::select(DB::raw('count(id) as count'), 'enum'))->groupBy('enum')->get();
    

    【讨论】:

    • 没有必要在这里写原始查询。 $wins = Model::where('enum', 'win')->count();$losts = Model::where('enum', 'lost')->count();
    • 这样,您对数据库进行了 2 个请求,而在我的示例中,您仅在一次调用中完成了所有操作。但当然,如果应用程序很小,也没关系。
    • 当然@Denis。您的回答是最有效的,但可能会让我对新手感到困惑。
    【解决方案3】:

    假设您正在使用 Eloquent 模型,您可以通过以下方式实现:

    假设您的模型称为 Registers

    use App\Registers;
    
    $register = new Registers();
    $wins = $register::where('type', 'Win')->count();
    
    $lost = $register::where('type', 'Lost')->count();
    

    在上面的示例中,假设您的 ENUM 列名为 type

    【讨论】:

    • 您的答案应该有效,但效率不高。它可以在数据库端解决。 all() 将加载 - 正如它所说 - 数据库上的所有项目和所有列(因为您没有指定要加载的列)到内存。在具有许多列或行的表中,它会非常慢并消耗大量内存。相反,您可以按照@Muhaimenul Islam 答案的建议进行查询并使用计数聚合。
    • 编辑了答案以反映您的建议 Elias Soares。
    猜你喜欢
    • 2019-07-03
    • 2019-02-16
    • 1970-01-01
    • 2019-10-04
    • 2019-11-30
    • 2019-01-18
    • 2013-06-16
    • 2011-03-25
    • 1970-01-01
    相关资源
    最近更新 更多