【发布时间】:2019-08-08 09:52:25
【问题描述】:
我想列出当月未付款或从未付款的学生。 可以使用单个查询构建器或雄辩的函数吗? 使用下面的代码,我可以做与我想要的完全相反的事情:/
$indebted = DB::table('students')->where('students.active',1)
->leftJoin('payments', 'students.id', '=', 'payments.user_id')
->whereMonth('payments.created_at','=', $today->month)
->get();
【问题讨论】:
-
根据您的数据计划有多大,如果您没有正确索引数据,那么使用这些“帮助”函数对数据库优化来说是很糟糕的。本质上,它们将日期列包装在一个函数周围,例如 MONTH(payments.created_at) = '05' - 这将强制对该列进行顺序扫描,因为该函数是易变的。为了优化这一点,您需要创建功能索引“CREATE INDEX idx_blah ON Payments (month(created_at))”或执行日期范围“->whereBetween('payments.created_at', [$today->startOfMonth, $ today->endOfMonth]) (假设 $today 是 Carbon 日期)
标签: php database laravel eloquent query-builder