我有一个正在处理的项目,并且有一个Staff
,Customer
和Sale
模型。
如预期的那样,Staff
可以有许多Sale
,其中一个Customer
-一个Customer
也可以有许多Sale
。
在我正在处理的视图中,我想显示属于Customer
成员的所有Staff
,但是只显示每个Customer
一次(DISTINCT,GROUP BY?),但是按最新的(sale_date,DESC)。
我尝试了许多显示此问题的方法,但是目前有以下代码:
Customer::join('sales', 'customers.id', '=', 'sales.customer_id')
->where('sales.staff_id',$id)
->orderBy('sales.sale_date', 'DESC')
->select('customers.*')
->get();
除奇数记录外,该记录在大多数情况下有效,奇数记录从八月中旬开始将有九月的记录。这是我尝试过的其他方法:
$staff->sales()->orderBy('sale_date','DESC')->distinct('customer_id')->get();
Sale::select(DB::raw('s.*'))
->from(DB::raw('(SELECT * FROM sales WHERE staff_id = '.$id.' ORDER BY sale_date DESC) s'))
->groupBy('s.customer_id')
->orderBy('sale_date','DESC')
->get();
我不介意返回
Sale
的集合,因为我可以修改视图以获取每个Sale
的Customer
任何帮助/建议将不胜感激!
编辑:刚刚也注意到,甚至没有获得不同的客户了:(
最佳答案
使用修改后的withCount()
可以通过子查询获得最新的销售信息:
Customer::withCount(['sales as sale_date' => function($query) {
$query->select(DB::raw('max(sale_date)'));
}])
->where('sales.staff_id', $id)
->orderByDesc('sale_date')
->get();
关于mysql - 使用连接和排序依据时的Laravel数据库排序问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52279527/