我已经被困了几天试图得到一些我认为应该非常简单的东西但是我找不到合适的解决方案,
我有以下模型(只打印重要的方法)
顺序
ID
created_at
OrderContent
ID
order_id
我的订单范围
scopeByRange($query,$d1,$d2){
return $query->whereBetween('created_at',[$d1,$d2])
}
哪种方法很完美,我想要的是一个包含OrderScope中所有orderContents的集合
像
这样的东西 $orderContents = Order::byRange($d1,$d2)->allOrderContents;
所以我不需要做一个bucle并合并集合
有办法吗?
答案 0 :(得分:1)
感谢@JarekTkaczky指出我正确的方向, 我的最终功能是以下功能,只是为报告做一些额外的计算
public static function byDateRange($d1,$d2){
$orderContents = null;
Order::byDateRange($d1,$d2)->with(['contents' => function($q) use(&$orderContents){
$orderContents = $q->select('*',
DB::raw('sum(quantity) as quantity_sum'),
DB::raw('sum(total) as total_sum'))
->groupBy('item_id')
->orderBy('total_sum','DESC')
->get()->unique();
},'contents.item'])->get();
return $orderContents;
}