Здравствуйте, у меня есть эта функция, которая суммирует 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 но я не могу использовать условие внутри запроса, я хочу сделать что-то вроде этого
->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}]
заранее спасибо
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 всего один месяц с этого года






Я знаю, что вы используете классы/методы laravel как абстракцию для SQL. Но пробовали ли вы использовать PDO и фактические операторы SQL для извлечения данных?
я совершенно новый, как я могу этого добиться? Можете ли вы дать мне пример кода для начала?
Пример оператора выбора PDO можно увидеть внизу этого сайта w3schools.com/php/php_mysql_select.asp
Пожалуйста, попробуйте этот код.
$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/…
это не сработало, но большое спасибо за ваши усилия <3
Это должно сработать, я уже делал это раньше с таким же подходом. Проверьте эту ссылку: stackoverflow.com/questions/40529355/…
Я предполагаю, что первый месяц должен быть месяцем только одного года, а не одним и тем же месяцем каждого года? Какую версию Laravel вы используете?