【问题标题】:Retrieve data from mySQL table in a array [closed]从数组中的mySQL表中检索数据[关闭]
【发布时间】:2020-01-17 10:39:02
【问题描述】:

我有一个名为 CallTriggers 的数据表,其中包含属性

cloturer = 0 or 1
created_at

我想得到这样的所有数据

$array = [
           ['Month', 'Total Call', 'Close'],
           ['Jan', 57, 50],
           ['Feb', 67, 60],
           ['Mar', 40, 40],
           ['Apr', 33, 30],
           ['May', 70, 66]
       ];

Example: ['Jan', 57, 50] 这里的 jan 是月份,57 是当月的调用次数,值为 1,50 是数据库中值为 0 的次数。

如何使用Laravel 5.6 执行这种操作?谢谢

【问题讨论】:

    标签: php mysql laravel


    【解决方案1】:

    型号

    class CallTrigger extends Model
    {
        protected $table = 'CallTriggers';
    }
    

    控制器功能

    $triggers = CallTrigger::all()
        ->groupBy(function($callTrigger) {
            return $callTrigger->created_at->format('M') .'-' . $callTrigger->created_at->format('Y');
        })
        ->map(function($group, $groupName) {
            return [
                $groupName,
                $group->where('cloturer', 1)->count(),
                $group->where('cloturer', 0)->count(),
            ];
        })
        ->values();
    

    【讨论】:

      【解决方案2】:

      你需要execute a raw query:

      SELECT 
        DATE_FORMAT(`created_at`, '%b') AS `Month`, 
        SUM(IF(`cloturer` = 1, 1, 0)) AS `Total Call`, 
        SUM(IF(`cloturer` = 0, 1, 0)) AS `Close` 
      FROM 
        `CallTriggers` 
      GROUP BY 
        MONTH(`created_at`), YEAR(`created_at`);
      

      为此,您需要在 MySQL 中 disable ONLY_FULL_GROUP_BY mode

      【讨论】:

      • 如果答案建议仅禁用完整的按 sql 模式分组,则该答案不正确。
      • 谢谢你,现在工作正常
      猜你喜欢
      • 1970-01-01
      • 2017-05-04
      • 1970-01-01
      • 2022-01-24
      • 1970-01-01
      • 2022-08-14
      • 1970-01-01
      • 2018-11-21
      • 2015-02-02
      相关资源
      最近更新 更多