2016-10-27 4 views
0

と次のように続けた後、3つの同じレコードを見つける:私がしようとしていますCakePHPは、私は、次のフィールドにタスクと呼ばれるモデル持っている3つの記録

  1. trade_id
  2. site_id
  3. third_email_alert_date

を対応する要求データとして同じsite_idtrade_idを持つ3つのタスクがあるタスクモデルでfind()を実行します。電子メールを送信してthird_email_alert_dateフィールドに入力します。

  1. 同じtrade_idsite_id
  2. で最後の3つのタスクを探す電子メールが
  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

ための条件でソート変更'=> 3' – tarikul05

+0

タスクの別のフィールドがいつでも変更される可能性があるので、 'modified'で注文することはできませんので、' third_email_alert_date'を確認する必要があります。 – user3574492

+0

'email_sent type DATETIME'のような新しいフィールドで、datetime ORDERを格納してクエリをLIMITすることができます – tarikul05

答えて

0

デフォルトでfalseに設定されているTINYINTフィールドを設定します。電子メールが送信されると、電子メールが真のものとして送信された3つのマークがマークされます。

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

それとも、日付が必要な場合は、日付だけで3つのすべてをマークし、次にあなたが `「順序は」=>リミット「DESC'`と`修正」することができますDATE_FIELD => nullを

関連する問題