gpt4 book ai didi

php - Laravel Eloquent Query 根据设定的条件查询多条记录

转载 作者:太空宇宙 更新时间:2023-11-03 11:27:31 30 4
gpt4 key购买 nike

我有一个表单,我的用户可以在其中设置条件来搜索他们的客户数据库,但是我正在努力将查询集中在一起(在 Laravel 5.7 中工作)。

目前客户可以设置的条件如下:

  • 客户有“确切|更多 |少于”X 次访问
  • 客户的第一次访问是“完全 |更多 |少于”X 天
  • 客户上次访问是“完全|更多 |少于”X 天
  • 客户提供商是“facebook |推特 |电邮 |任何”

我现在正在努力思考如何将其构建到查询中,我什至无法提供一个具体的示例!我的障碍似乎是检查第一条记录和最后一条记录以确保它符合标准。

SQLFiddle:http://sqlfiddle.com/#!9/68407/1

我的表:

|  id  | name           | email                                       | provider    | created_at
---------------------------------------------------------------------------------------
| 1 | Mr Smith | mr.smith@example.com | facebook | 2018-11-01 09:00:00 |
| 2 | Mrs Smith | mrs.smith@example.com | facebook | 2018-11-01 09:00:00 |
| 3 | Miss Smith | miss.smith@example.com | email | 2018-11-01 09:00:00 |
| 4 | Doctor Smith | doctor.smith@example.com | email | 2018-11-01 09:00:00 |
| 5 | Lord Smith | lord.smith@example.com | twitter | 2018-11-01 09:00:00 |
| 6 | Lady Smith | lady.smith@example.com | email | 2018-11-01 09:00:00 |
| 7 | Mr Smith | mr.smith@example.com | facebook | 2018-11-02 09:00:00 |
| 8 | Mrs Smith | mrs.smith@example.com | facebook | 2018-11-02 09:00:00 |
| 9 | Doctor Smith | doctor.smith@example.com | email | 2018-11-02 09:00:00 |
| 10 | Lord Smith | lord.smith@example.com | twitter | 2018-11-02 09:00:00 |
| 11 | Lady Smith | lady.smith@example.com | email | 2018-11-02 09:00:00 |
| 12 | Mr Smith | mr.smith@example.com | facebook | 2018-11-03 09:00:00 |
| 13 | Mrs Smith | mrs.smith@example.com | facebook | 2018-11-03 09:00:00 |
| 14 | Miss Smith | miss.smith@example.com | email | 2018-11-03 09:00:00 |
| 15 | Lord Smith | ord.smith@example.com | twitter | 2018-11-03 09:00:00 |
| 16 | Lady Smith | lady.smith@example.com | email | 2018-11-03 09:00:00 |

查询的示例客户标准:

  • 访问次数超过 2 次的客户
  • 客户第一次来访是在 2 天前
  • 客户上次访问是在 1 天前
  • 客户提供商是 Facebook

当前查询:

    $Customers = Customer::groupBy('email')
->havingRaw('COUNT(*) > 2’)
->where('created_at', '<', Carbon::now()->subDays(2)->toDateTimeString())
->get();

我无法弄清楚如何提取第一条客户记录以检查其存在时间超过 2 天,然后提取他们的最后一条记录并确保其存在时间超过 1 天。我知道我当前的查询对于我想要实现的目标完全没用,但我再次努力将其整合在一起。

预期结果:

|  id  | name           | email                                       | provider    | created_at
---------------------------------------------------------------------------------------
| 12 | Mr Smith | mr.smith@example.com | facebook | 2018-11-03 09:00:00 |
| 13 | Mrs Smith | mrs.smith@example.com | facebook | 2018-11-03 09:00:00 |

最佳答案

您要查找的查询是:

select * from customers group by email having count(*) > 2 and min(created_at) <= '2018-10-02 09:00:00' and max(created_at) <= '2018-10-03 09:00:00' and provider = 'facebook'

假设当前时间是2018-10-04 09:00:00。

Eloquent :

$Customers = Customer::groupBy('email')
->havingRaw('COUNT(*) > 2')
->havingRaw('max(created_at) < ?' , [Carbon::now()->subDays(2)->toDateTimeString()])
->havingRaw('min(created_at) < ?' , [Carbon::now()->subDays(1)->toDateTimeString()])
->havingRaw('provider = ?' , ['facebook'])
->get();

另外,使用 Eloquent 可以链接方法,如下所示

$customers = Customer::groupBy('email');

if( $includeCount ) {

$customers->havingRaw('COUNT(*) > 2');
}
...
...
...

关于php - Laravel Eloquent Query 根据设定的条件查询多条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53137551/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com