【发布时间】:2019-02-16 04:06:36
【问题描述】:
我有一个正在处理的项目,我有一个 Staff、Customer 和 Sale 模型。
正如预期的那样,Staff 可以有很多 Sales,其中有一个 Customer - Customer 也可以有很多 Sales。
在我正在处理的视图中,我想显示属于Staff 成员的所有Customers,但每个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();
我不特别介意返回Sales 的集合,因为我可以修改我的视图以获取每个Sale 的Customer
任何帮助/建议将不胜感激!
编辑:刚刚也注意到,甚至不再有不同的客户:(
【问题讨论】:
-
如果将
Sale::select替换为DB::table('sales')会发生什么?
标签: mysql laravel eloquent mariadb