【问题标题】:PHP Laravel extract data from db by month & yearPHP Laravel 按月和年从数据库中提取数据
【发布时间】:2019-03-15 17:14:02
【问题描述】:

你好,我有这个函数,它可以对budget_cost 求和并按月获取数据

public function marktingCost(){

$costs = \DB::table('campaigns')
    ->select('campaign_leadsource_id', \DB::raw('SUM(budget_cost) as budget_total_month'))
    ->addselect('campaign_leadsource_id', \DB::raw('SUM(budget_cost) as budget_total_year'))
    ->groupBy('campaign_leadsource_id')
    ->where('campaign_status_id',4) // campaign_status_id = 4 means campaign completed
    ->where(\DB::raw('MONTH(created_at)'), Carbon::today()->month)
    ->get(); return $costs}

我试图实现的是按月获取数据作为budget_total_month,并按年获取数据作为budget_total_year 但我不能在查询中使用 if 条件我想做这样的事情

->select('campaign_leadsource_id', \DB::raw('SUM(budget_cost) as budget_total_month') ->where(\DB::raw('MONTH(created_at)'), Carbon::today()->month))
->addselect('campaign_leadsource_id', \DB::raw('SUM(budget_cost) as budget_total_year') ->where(\DB::raw('Year(created_at)'), Carbon::today()->year))

但这当然是无效的

我想要的输出是

[{"campaign_leadsource_id":1,"budget_total_month":11475,"budget_total_year":134761,"olxTotal":12,"budget_per_lead":11230},{"campaign_leadsource_id":2,"budget_total_month":4221,"budget_total_year":41215,"olxTotal":9,"budget_per_lead":4579}]

提前谢谢你

【问题讨论】:

  • 我假设第一个月是一年中的月份,而不是每年的同一个月?你使用的是什么版本的 Laravel?
  • whereYear('created_at', '=', $year) ->whereMonth('created_at', '=', $month)
  • 你好谢谢你的回答我试过这样`->select('campaign_leadsource_id', \DB::raw('SUM(budget_cost) as budget_total_'。$Month)->whereMonth( 'created_at', '=', $Month)) ->addselect('campaign_leadsource_id', \DB::raw('SUM(budget_cost) as budget_total_' . $Year)->whereYear('created_at', '=', $year))` 但我得到“调用未定义的方法 Illuminate\Database\Query\Expression::whereMonth()”
  • 我从今年开始使用 laravel 5.7 仅一个月

标签: php mysql laravel


【解决方案1】:

请试试这个代码。

$costs = \DB::table('campaigns')
        ->select('campaign_leadsource_id', \DB::raw('SUM(budget_cost) as budget_total_month'))
        ->addselect('campaign_leadsource_id', \DB::raw('SUM(budget_cost) as budget_total_year'))

        ->where('campaign_status_id',4) // campaign_status_id = 4 means campaign completed
        ->where(\DB::raw('MONTH(created_at)'), Carbon::today()->month)
        ->groupBy(\DB::raw("MONTH(created_at)"))
        ->get();

【讨论】:

  • 感谢您的回答我试过了,但收到此错误SQLSTATE[42000]: Syntax error or access violation: 1055 'sedracrm.campaigns.campaign_leadsource_id' isn't in GROUP BY (SQL: select campaign_leadsource_id, SUM(budget_cost) as budget_total_month, campaign_leadsource_id, SUM(budget_cost) as budget_total_year from campaigns` 其中campaign_status_id = 4 和 MONTH(created_at) = 3 group by MONTH( created_at))`
  • 请这样做。在 config\database.php --> "mysql" 数组中设置 'strict' => false 以禁用所有。或关注此stackoverflow.com/questions/40917189/…
  • 它有效,但它只按月而不是按月和年获取数据
  • 替换这个->groupBy(\DB::raw("MONTH(created_at)"),\DB::raw("YEAR(created_at)"))但是你应该检查这个来改变代码的良好状态stackoverflow.com/questions/40529355/…
  • 应该可以,我之前已经用同样的方法做过了。检查此链接:stackoverflow.com/questions/40529355/…
【解决方案2】:

我知道您使用 laravel 类/方法作为 SQL 的抽象。但是您是否尝试过使用 PDO 和实际的 SQL 语句来检索数据?

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多