2016-10-27 47 views
0
繼續

我有一個叫任務具有以下字段的模型:CakePHP的發現3條相同的記錄,然後用以下3條

  1. trade_id
  2. site_id
  3. third_email_alert_date

我想在任務模型上執行find(),其中有3個任務具有相同的site_idtrade_id作爲相應的請求數據,I然後會發送一封電子郵件並填寫third_email_alert_date字段。

所以它在本質上應做到以下幾點:

  1. 找到最後3個任務以相同的trade_idsite_id
  2. 發送電子郵件,並在郵件發送
  3. 日期填充 third_email_alert_date
  4. 從設置了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個,並從最新更新的記錄再次進行計數。有任何想法嗎?

+0

可以'「秩序」 =>「修改DESC''和'」限'=> 3' – tarikul05

+0

我無法通過'modified'命令進行排序,因爲任務中的另一個字段可能隨時被修改,所以這將不起作用,因爲我需要檢查'third_email_alert_date' – user3574492

+0

,那麼您可以添加一個像'email_sent type DATETIME'這樣的新字段,您可以在其中存儲日期時間ORDER並限制您的查詢 – tarikul05

回答

0

設置默認爲false的TINYINT字段。發送電子郵件時,將發送了電子郵件的三個標記爲true,然後在您的發現中僅包含發送電子郵件的字段。

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

或者,如果你需要的只是日期標記所有三連的日期,然後更改排序調理DATE_FIELD =>空