【问题标题】:CakePHP find 3 same records then continue with following 3 recordsCakePHP 找到 3 条相同的记录,然后继续以下 3 条记录
【发布时间】:2016-10-27 13:12:32
【问题描述】:

我有一个名为 Task 的模型,其中包含以下字段:

  1. trade_id
  2. site_id
  3. third_email_alert_date

我正在尝试在 Task 模型上执行 find(),其中有 3 个任务具有相同的 site_idtrade_id 作为相应的请求数据,然后我将发送一封电子邮件并填充 third_email_alert_date字段。

所以本质上它应该做以下事情:

  1. 找到最后 3 个具有相同 trade_idsite_id 的任务
  2. 发送电子邮件并在third_email_alert_date 中填写电子邮件的发送日期
  3. 从设置了third_email_alert_date 的记录之后重新开始计数。

这是我所拥有的:

任务条件:

                    $task_conditions = array(
                        'Task.trade_id' => $this->request->data['Task']['trade_id'],
                        'Task.site_id' => $this->request->data['Task']['site_id']
                    );

按创建日期降序排列,以便我们首先处理最新任务:

                    $tasks= $this->Task->find('all', array(
                        'conditions' => $task_conditions,
                        'order' => 'created DESC'
                        )
                    );

这为我提供了 trade_idsite_id 匹配的所有记录以及最近创建的订单。

我似乎无法弄清楚如何找到最后 3 个并从新更新的记录中再次计数。有什么想法吗?

【问题讨论】:

  • 你可以'order' => 'modified DESC''limit' => 3
  • 我无法通过modified 订购,因为任务上的另一个字段可能随时被修改,因此这将不起作用,因为我需要检查third_email_alert_date
  • 然后您可以添加一个新字段,例如 email_sent type DATETIME,您可以在其中存储日期时间 ORDER 并限制您的查询
  • 我已经有那个叫third_email_alert_date的了?但是我将如何保留它对记录的计数方式?

标签: php cakephp


【解决方案1】:

设置一个默认为 false 的 TINYINT 字段。发送电子邮件时,将已发送电子邮件的三个标记为 true,然后在您的查找中仅包含电子邮件发送字段。

$tasks= $this->Task->find('all', array(
    'conditions' => $task_conditions + ['email_sent' => false],
    'order' => 'created DESC'
    )
);

或者如果您需要日期,只需用日期标记所有三个,然后更改 date_field => null 的排序条件

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-07
    • 2020-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-12
    相关资源
    最近更新 更多