2016-06-22 4 views
0

私は以下のように私のテーブルに開始日と終了日を持っています。forloopのfind関数を使用して電子メールを送信するPHPコード

STARTDATE = 2016年1月1日

ENDDATE = 2016年6月20日

今私は、終了日から1ヶ月前に自動的に電子メールを送信します。

すべてが

...細かい...メールも送信されて働いているしかし、私の問題は、2行は、その後のメールの両方に行っている私の条件にテーブルに一致がある場合、私は複数のユーザーに電子メールを送信したいですユーザー。

しかし、私のコードは、単一のユーザーだけに電子メールを送信します。すべてのユーザーではありません。 私はすべてのユーザーに電子メールが1つずつ届きたいと思っています。

public function certificateExpired() 
    { 
     $this->autoRender = False; 
     $this->loadModel('Certificate'); 
     $data = $this->Certificate->find("all", array(
      'recursive' => -1, // should be used with joins  
      'fields' => array('User.*', 'Certificate.*'), 
      'joins' => array(
       array(
         'table' => 'users', 
         'alias' => 'User', 
         'type' => 'LEFT', 
         'conditions' => array('User.id = Certificate.user_id') 
        ) 
       ), 
       'conditions' => array('Certificate.is_expirable' => 1,'Certificate.status' => 1) 
     ));  
     foreach ($data as $row) {  
      $currentdate = date("Y-m-d"); 
      $date = $row['Certificate']['end_date']; 
      $newdate = strtotime($date .' -1 months'); 
      $enddate = date('Y-m-d', $newdate); 
      if ($currentdate >= $enddate) { 
      //For sending email 
      $data['email'] = $row['User']['email']; 
      $data['name'] = $row['User']['name']; 
      $data['document_name'] = $row['Certificate']['name']; 
      $data['templateid'] = 19; 
      $send_mail = $this->EmailFunctions->certificateExpiredTemplate($data); 
      if ($send_mail) { 
       $this->redirect(array('controller' => 'Dashboards', 'action' => 'shipperDashboard')); 
       }  
      } 
     }  
    } 
+0

あなたのリダイレクトをforeachループの外に置いてください –

+1

foreachループの外側で '$ this-> redirect(array( 'controller' => 'ダッシュボード'、 'アクション' = '' shipperDashboard '));'を入れてください。 –

+0

大丈夫私はテストしています... –

答えて

1
foreach ($data as $row) {  
      $currentdate = date("Y-m-d"); 
      $date = $row['Certificate']['end_date']; 
      $newdate = strtotime($date .' -1 months'); 
      $enddate = date('Y-m-d', $newdate); 
      if ($currentdate >= $enddate) { 
      //For sending email 
      $data['email'] = $row['User']['email']; 
      $data['name'] = $row['User']['name']; 
      $data['document_name'] = $row['Certificate']['name']; 
      $data['templateid'] = 19; 
      $send_mail = $this->EmailFunctions->certificateExpiredTemplate($data);  
      } 
} 

$this->redirect(array('controller' => 'Dashboards', 'action' => 'shipperDashboard')); 

変化として上記foreachループ。

+1

あなたの返信ありがとう...しかし、私は解決策とその作業を得た.. –

関連する問題