我有个问题想不通。仅供参考,我用的是拉维5.6
我有一个 offers
表和a requests
表格;
offers-table
- id
- quotation_amount
- ...
requests-table
- id
- offer_id
- date
- ...
这是一对多的关系。澄清:一个要约可以被多次请求,而一个请求只属于一个要约(关系设置正确。)
现在我需要知道 quotation_amount
每月。第一个请求(由“日期”列选择)将导致确定要分组的月份。其他的请求基本上应该被忽略。
我们需要这样做的原因是,我们可以看到我们的销售额相比,我们提供给客户。如果一个月内我们的产品报价为1.000.000,但同一个月内我们的售价仅为10万(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();
但上述方法不起作用,因为如果两个月内有两个请求只提供一个报价,那么这两个月都会计算在内。
谁能帮我或给我指出正确的方向?
1条答案
按热度按时间xfb7svmp1#
尝试使用原始查询: