У меня есть проблема, которую я не могу понять.Кстати, я использую Laravel 5.6
У меня есть таблица offers
и таблица requests
;
offers-table
- id
- quotation_amount
- ...
requests-table
- id
- offer_id
- date
- ...
Это отношение один ко многим.Чтобы уточнить: предложение может быть запрошено несколько раз, и запрос относится только к одному предложению.(Отношения настроены правильно.)
Теперь мне нужно знать общую сумму из quotation_amount
в месяц . первый запрос (выбранный в столбце даты) опережает в определении месяца, который нужно сгруппировать. Другие запросы должны игнорироваться в основном.
Причина, по которой мыЭто необходимо, чтобы мы могли видеть, сколько мы продали по сравнению с тем, что мы предложили клиентам.Если мы предлагаем 1 000 000 товаров в месяц, но продаем только 100 000 (10%) в том же месяце, значит, что-то не так в отделе продаж или наши предложения слишком дорогие:).
Таким образом, для сравнения данных у меня есть таблица projects
, в которой есть столбцы contract_sum
и sale_date
.Это было намного проще, потому что я просто мог сделать это;
$sales['projects'] = array_replace(
array_fill_keys(range(1, 12), 0), $projects->groupBy('sale_date.month')->map(function($projects) {
return $projects->pluck('contract_sum')->sum();
})->toArray()
);
Вывод из кода выше;
Array
(
[1] => 760335
[2] => 1154054
[3] => 683762
//... untill 12
)
Но чтобы получить тот же вывод для суммы предложения, мне нужна датачтобы выйти из отношений, которые могут иметь более одного результата, я не знаю, как это сделать.Я также попробовал что-то вроде следующего и различные варианты на нем:
$offers = Offer::with(['requests' => function($query) {
$query->orderBy('date')->take(1);
}])->whereHas('requests', function($query) {
$query->whereMonth('date', $month);
})->get();
Но выше не работает, потому что если есть два запроса в два разных месяца только для одного предложения, он будет засчитан в обоихмесяцев.
Кто может мне помочь или указать мне правильное направление?