Laravel 查询 - SQL:获取今天开始新时期的记录
Posted
技术标签:
【中文标题】Laravel 查询 - SQL:获取今天开始新时期的记录【英文标题】:Laravel query - SQL: Get records start new period today 【发布时间】:2020-04-12 15:20:52 【问题描述】:我陷入了 laravel 查询。请看一下,让我知道任何线索或解决方案。 谢谢。
这是我的问题。
现在:2019-12-20。
我有一个模型 People 有这样的表格:
[
id: 1,
type: 'employee',
created_at: '2019-11-20',
,
id: 2,
type: 'employee',
created_at: '2019-09-20',
,
id: 3,
type: 'employee',
created_at: '2019-11-25',
,
id: 4,
type: 'ceo',
created_at: '2019-11-20',
,
id: 5,
type: 'cfo',
created_at: '2019-11-27',
,
]
我必须每月支付员工工资,正好是第 30 天(周期为 30 天)。
所以我的想法是获取记录:
有类型employee
。
(现在 - created_at)% 30 = 0。
这是我目前的代码:
$people = People::where('type', 'employee')->get();
foreach ($people as $key => $person)
$diff_in_days = Carbon::parse($person->created_at)->diffInDays(Carbon::now()) % 30;
if ($diff_in_days === 0)
// paid for this person.
我得到了结果:
[
id: 1,
type: 'employee',
created_at: '2019-11-20',
,
id: 2,
type: 'employee',
created_at: '2019-09-20',
,
]
我想知道有什么方法可以在第一个查询中获取适合 created_at
的记录。
我认为它可能看起来像这样。
$people = People::where('type', 'employee')
-> // some codes to compare: (now - created) % 30 === 0
->get();
foreach ($people as $key => $person)
// paid for this person.
谢谢大家。
【问题讨论】:
【参考方案1】:你可以试试——
->whereRaw('DATEDIFF(now(), created_at) = 30')
DATEDIFF()
根据评论的其他条件 -
DATEDIFF(NOW(), created_at) > 60
DATEDIFF(NOW(), created_at) > 90
DATEDIFF(NOW(), created_at) > 60 AND DATEDIFF(NOW(), created_at) <= 90
【讨论】:
谢谢。这对我来说是一个重要的线索。我已经更新了我的问题,对我的错误感到抱歉。如何获得employee
创建于 60 天前、90 天前、...
可能是DATEDIFF(NOW(), created_at) > 60
或DATEDIFF(NOW(), created_at) > 90
或DATEDIFF(NOW(), created_at) > 60 AND DATEDIFF(NOW(), created_at) <= 90
非常感谢。我有解决办法。 ->whereRaw('DATEDIFF(NOW(), created_at) % 30 = 0')
。你救了我一整天。【参考方案2】:
可能是这样的:
$people = People::where('type', 'employee')
->whereRaw('DATEDIFF(DAY, GETDATE(), created_at) = 30')
->get();
【讨论】:
谢谢。我有个问题。在where
子句中,我还没有检索到$person->created_at
。我错了吗?
我已经做出改变了!
非常感谢。我有解决办法。 ->whereRaw('DATEDIFF(NOW(), created_at) % 30 = 0')
。你们救了我一整天。以上是关于Laravel 查询 - SQL:获取今天开始新时期的记录的主要内容,如果未能解决你的问题,请参考以下文章