我有一个正在研究的项目,并且有一个Staff
,Customer
和Sale
模型。
如预期的那样,Staff
可以有许多Sale
,其中有一个Customer
-一个Customer
也可以有许多Sale
。
在我正在处理的视图中,我想显示属于Customer
成员的所有Staff
,但是只显示一次每个Customer
(DISTINCT,GROUP BY?)但按最新的Sale
(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
的集合,因为我可以修改视图以获取每个Customer
的{{1}}
任何帮助/建议将不胜感激!
编辑:同样也注意到了,甚至也没有获得过不同的客户:(
答案 0 :(得分:1)
根据joins documentation的加入功能,使用数据库而不是直接使用模型,因此请尝试用Sale::select
替换DB::table('sales')
。
答案 1 :(得分:1)
使用修改后的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();