繁体   English   中英

Laravel雄辩,最大日期等于过去30天

[英]Laravel eloquent where max date equal to past 30 days

我有这样的雄辩:

$users = [1,2,3,4,5];
$transactions = Transaction::whereIn('user_id', $users)
            ->where(DB::raw('DATE(MAX(created_at))'), Carbon::now()->subMonth()->format('Y-m-d'))->get();

return $transactions;

但是它返回此错误: General error: 1111 Invalid use of group function (SQL: select * from transactions where 0 = 1

如何获得上一次交易等于过去30天的所有用户?

这是您需要时的原始查询:

select * from `transactions` where `0` = 1 and DATE(MAX(created_at)) = ?

表结构:

Users Table: id (not autoincrement), name, gender, created_at

Transactions Table: id (not autoincrement), user_id (FK), amount, created_at

我当前的解决方案:

迭代每个用户并检查其最大created_at

谢谢

您可以简单地执行此操作,而不必使用DB::raw()查询。

尝试这个:

$users = [1,2,3,4,5];
$transactions = Transaction::whereIn('user_id', $users)
            ->where('created_at', '=', Carbon::now()->format('Y-m-d'))
            ->get();

return $transactions;

现在我尝试的是我按降序对表格进行排序,以评估最新记录何时按用户ID进行分组...

$users = [1,2,3,4,5];
$transactions = Transaction::select(DB::raw('select id from transactions order by transaction.created_at desc as table1' )->leftJoin('transactions','id','=','table1.id')->whereIn('user_id', $users)
            ->where('created_at', '=', Carbon::now()->subMonth()->format('Y-m-d'))->groupBy('transaction.user_id')
            ->get();

return $transactions;

无需执行原始查询。

$users = [1,2,3,4,5];
$transactions = Transaction::whereIn('user_id', $users)
                ->whereDate('created_at', '=', Carbon::today()->subDays(30)->toDateString())->get();

return $transactions;

你必须使用whereBetween

$users = [1,2,3,4,5];
$transactions = Transaction::select(DB::raw('DATE(MAX(created_at))'))->whereIn('user_id', $users)
        ->whereBetween('created_at',array(Carbon::now(),Carbon::now()->subMonth()->format('Y-m-d')))->get();

return $transactions;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM