Как использовать несколько whereBetween для суммирования двух разных записей

#php #laravel #laravel-7

#php #laravel #laravel-7

Вопрос:

Мне нужно сравнить и суммировать данные с двух разных дат.

Предполагая, что у меня есть 4 даты ввода

 startdate = "2020-11-01",
enddate = "2020-11-30",
compare_startdate = "2020-12-01",
compare_enddate = "2020-12-31",
 

В настоящее время мой запрос может получить только один whereBetween данные даты, как показано ниже

Текущий код

 $raw_data = ChartOfAccount::with(array(
    'journal' => function($query) use ($init)
    {
            $query->selectRaw('*,
            sum(item_journals.debit) as total_debit,
            sum(item_journals.credit) as total_credit,
            sum(item_journals.debit) - sum(item_journals.credit) as net_movement');
            $query->groupBy('chart_of_account_id');
            $query->where('item_journals.deleted_at', null);
            $query->whereBetween('date', array($init['startdate'], $init['enddate']));                
    }
    ))
    ->get();
 

Текущий результат из startdate и enddate

 "total_debit" => "0.00"
"total_credit" => "200.00"
"net_movement" => "-200.00"
 

Пример другого результата из compare_startdate и compare_enddate

  "total_debit" => "0.00"
 "total_credit" => "50.00"
 "net_movement" => "-50.00"
 

Как запросить другой результат от compare_startdate to compare_enddate , чтобы суммировать результат startdate и enddate ?

Ожидаемый результат

 "total_debit" => "0.00"
"total_credit" => "150.00"
"net_movement" => "-150.00"
 

Я пробовал что-то подобное в запросе, но результат неверный

 $query->whereBetween('date', array($init['startdate'], $init['enddate']));                
$query->whereBetween('date', array($init['compare_startdate'], $init['compare_enddate']));                
 

Ответ №1:

Привет, друг, ты можешь заранее использовать orWhereBetween в предложении where, как показано ниже,

 DB::table('tbl')
  ->Where(function ($query) use ($startdate,$enddate,$compare_startdate,$compare_enddate) {
      $query->whereBetween('date', [$startdate, $enddate]);
      $query->orWhereBetween('date', [$compare_startdate, $compare_enddate] );
})->get();