Получить сумму суммы столбца базы данных - PullRequest
0 голосов
/ 25 апреля 2019

В моей базе данных есть столбцы таблицы date, status и amount. Поэтому я хочу запросить сумму между двумя датами, такими как начальная и конечная даты с определенной суммой. но есть одна проблема, если дата, подобная этой от '2019-03-27' до '2019-04-25', это означает получение мудрой суммы за последние 30 дней для всех записей поля amount, которое имеет статус 'Winner'. Когда месяц отличается в обоих дат в то время возникают проблемы. я хочу, чтобы все для этого графика https://prnt.sc/ngq5ky

<?php
if($dt_static == "Last_30_Days"){ 
    $Target_Arch_Graph = [];
    $cd = Carbon::createFromFormat('Y-m-d', $dt_endDate)->format('d');                       
    $d = Carbon::createFromFormat('Y-m-d', $dt_startDate)->format('d'); 
    $m = Carbon::createFromFormat('Y-m-d', $dt_startDate)->format('m');                       
    for($k = $d;$k<= $cd; $k++)
    {   
        if($k== 0)
        {
            $d = 0;                                   
            $m++;
        }
        $Get_Target_Arch_Graph = DB::table('bid_project')
        ->where('bid_project.status', '=', 'Winner')
        ->where('bid_project.date','=', date('Y-'.$m.'-'.$d))              
        ->sum('amount');
        $Target_Arch_Graph[] = json_decode('['.$d++.','.$Get_Target_Arch_Graph.']', true); 
    }                        
}

Ответы [ 2 ]

0 голосов
/ 25 апреля 2019

если это всегда будет так, вы можете сделать этот запрос более «красноречивым»:

В модели your_model_name.php:

   public function scopegetAmoutByDate($fromDate, $toDate)
   {
     return   DB::table('bid_project')
             ->where('status', 'Winner')
             ->whereBetween('date', array($fromDate, $toDate))              
             ->sum('amount')
             ->get();

   }

Затем, чтобы вызвать этот метод из контроллера:

ModelName::getAmoutByDate('2019-03-15', '2019-03-18');

Просто добавьте префикс getAmoutByDate () к области видимости. Это станет scopegetAmoutByDate ().

Теперь вы можете вызывать его из любого места, например ModelName :: getAmoutByDate ().

0 голосов
/ 25 апреля 2019

Вы можете добиться того же с Eloquent, но не зная своих моделей, вот решение для использования построителя запросов:

DB::table('bid_project')
    ->where('status', 'Winner')
    ->whereBetween('date', [$dt_startDate, $dt_endDate])              
    ->sum('amount');

Если ваши даты уже отформатированы как Y-m-d, тогда вам просто нужнопередать их в массиве выше.Или передавайте их как экземпляры Carbon, и все должно быть хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...