laravel使用连接和order by时的数据库排序问题

nwnhqdif  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(335)

我有一个项目,我正在工作,我有一个 Staff , Customer & Sale 模型。
正如所料, Staff 可以有很多 Sale 哪个有一个 Customer -a Customer 也可以有很多 Sale s。
在我正在处理的视图中,我希望显示所有 Customer 它属于 Staff 成员,但显示每个 Customer 只有一次(不同,分组?),但按最近的顺序排列 Sale (销售日期,描述)。
我已经尝试了许多不同的方法来显示这一点,但目前有以下代码:

Customer::join('sales', 'customers.id', '=', 'sales.customer_id')
->where('sales.staff_id',$id)
->orderBy('sales.sale_date', 'DESC')
->select('customers.*')
->get();

这在很大程度上是有效的,除了一个奇怪的记录,8月的一半将有一个9月的记录。以下是我尝试过的其他一些方法:

$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 对于每个 Sale 任何帮助/建议将不胜感激!
编辑:也注意到了,甚至不再有不同的客户:(

9wbgstp7

9wbgstp71#

使用修改的 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();
lqfhib0f

lqfhib0f2#

根据joins文档,join特性直接使用db而不是模型,因此尝试替换 Sale::selectDB::table('sales') .

相关问题