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) &gt; 60DATEDIFF(NOW(), created_at) &gt; 90DATEDIFF(NOW(), created_at) &gt; 60 AND DATEDIFF(NOW(), created_at) &lt;= 90 非常感谢。我有解决办法。 -&gt;whereRaw('DATEDIFF(NOW(), created_at) % 30 = 0')。你救了我一整天。【参考方案2】:

可能是这样的:

$people = People::where('type', 'employee')
                ->whereRaw('DATEDIFF(DAY, GETDATE(), created_at) = 30')
                ->get();

【讨论】:

谢谢。我有个问题。在where 子句中,我还没有检索到$person-&gt;created_at。我错了吗? 我已经做出改变了! 非常感谢。我有解决办法。 -&gt;whereRaw('DATEDIFF(NOW(), created_at) % 30 = 0')。你们救了我一整天。

以上是关于Laravel 查询 - SQL:获取今天开始新时期的记录的主要内容,如果未能解决你的问题,请参考以下文章

Laravel - 获取今天在开始和结束之间的行

在 laravel 5.1 中无法获取 SQL 查询

在 Laravel 5 Eloquent 中获取原始 SQL 查询的结果

laravel 获取某个查询的查询SQL语句

SQL 查询获取最常访问的地方 Laravel

Laravel Eloquent使用小记