我有一个正在处理的项目,并且有一个StaffCustomerSale模型。

如预期的那样,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的集合,因为我可以修改视图以获取每个SaleCustomer

任何帮助/建议将不胜感激!

编辑:刚刚也注意到,甚至没有获得不同的客户了:(

最佳答案

使用修改后的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/

10-11 03:06