2015-08-20 24 views
2

我想從控制器傳遞foreach值來查看,但我只收到一個空數組。在下面的代碼基於foreach中的值我執行了一個查詢,我想設置值,以便我可以在視圖中使用它。從控制器傳遞foreach的值來查看

foreach($logresponse as $row1){ 
    $customerid = $row1['customerid']; 
    $topicid = $row1['topicid']; 
    $todolistid = $row1['todolistid']; 
    $sqlQry="select leadid,customerid as leadcustid,formname from lead_frontend where customerid='$customerid' order by leadid DESC limit 1"; 
    $leadInfo[] = $this->execute_flatten($sqlQry); 
    if($topicid == 1){ 
     $query2="SELECT a.*,b.username,b.user_id,b.group_id,b.email as salesmanemail,d.email,d.phone1,e.subject,e.subject1,e.content,e.embed_template FROM todolist_frontend as a LEFT JOIN users_backend as b ON a.salesmanid=b.user_id LEFT JOIN customer as c ON c.customerid=a.customerid LEFT JOIN customer_address as d ON d.customerid=a.customerid LEFT JOIN admin_email_action as e ON a.combination_id=e.combination_id where a.todolistid='$todolistid'"; 
    } 
    else if($topicid == 2){ 
     $query2="SELECT a.*,b.username,b.user_id,b.group_id,b.email as salesmanemail,d.email,d.phone1,e.subject,e.subject1,e.call_info as content FROM todolist_frontend as a INNER JOIN users_backend as b ON a.salesmanid=b.user_id INNER JOIN customer as c ON c.customerid=a.customerid INNER JOIN customer_address as d ON d.customerid=a.customerid INNER JOIN admin_call_action as e ON a.combination_id=e.combination_id where a.todolistid='$todolistid'"; 
    } 
    else if($topicid == 18){ 
     $query2="SELECT a.*,b.username,b.user_id,b.group_id,b.email as salesmanemail,d.email,d.phone1,e.subject,e.subject1,e.call_info as content FROM todolist_frontend as a INNER JOIN users_backend as b ON a.salesmanid=b.user_id INNER JOIN customer as c ON c.customerid=a.customerid INNER JOIN customer_address as d ON d.customerid=a.customerid INNER JOIN admin_managercall_action as e ON a.combination_id=e.combination_id where a.todolistid='$todolistid'"; 
    } 
    else{ 
     $query2="SELECT a.*,b.username,b.user_id,b.group_id,b.email as salesmanemail,d.email,d.phone1,e.content,e.subject1,f.emailname as subject,g.mailername AS mailersubject FROM todolist_frontend as a LEFT JOIN users_backend as b ON a.salesmanid=b.user_id LEFT JOIN customer as c ON c.customerid=a.customerid LEFT JOIN customer_address as d ON d.customerid=a.customerid LEFT JOIN admin_mailer_action as e ON a.combination_id=e.combination_id LEFT JOIN emailtype_backend as f ON e.subject=f.emailid LEFT JOIN mailer_backend AS g ON e.subject = g.mailerid where a.todolistid='$todolistid'"; 
    } 
    $result = $this->execute_flatten($query2); 

    $subjecttodo = array(); 
    foreach ($result as $res1){ 
     if($res1['topicid'] == 1 && !empty($res1['subject'])){ 
      $subject1 = $res1['subject']; 
      $sub_qry="select emailname from emailtype_backend where emailid=$subject1"; 
      $subject_result=$this->execute_flatten($sub_qry); 
      $subjecttodo=isset($subject_result['0']['emailname']) ? $subject_result['0']['emailname'] : ""; 
     } 
     if($res1['topicid'] == 2 || $res1['topicid'] == 18){ 
      $subjecttodo=$res1['subject']; 
     } 
     if($res1['topicid'] == 8){ 
      $subjecttodo=$res1['mailersubject']; 
     } 
    $this->set('subjecttodo', $subjecttodo); 
    } 
    $this->set('leadInfo', $leadInfo); 
} 
+1

你似乎在你的控制器代碼中有大量的sql - 這不是一件好事(爲什麼有SQL呢,也有點奇怪,因爲查詢很簡單)。至少,所有的邏輯都應該在控制器所調用的模型方法中。 – AD7six

+0

是的你是對的。現在我正在處理邏輯。後來我需要將所有這些簡單代碼更改爲cakePHP格式。無論如何謝謝你的建議。 – Surya

回答

1
foreach($logresponse as $key => $row1){ 
      $customerid = $row1['customerid']; 
      $topicid = $row1['topicid']; 
      $todolistid = $row1['todolistid']; 

      $sqlQry="select leadid,customerid as leadcustid,formname from lead_frontend where customerid='$customerid' order by leadid DESC limit 1"; 
      $leadInfo = $this->execute_flatten($sqlQry);    
      $logresponse[$key]['formname'] = isset($leadInfo[0]['formname']) ? $leadInfo[0]['formname'] : ''; 

      if($topicid == 1){ 
       $query2="SELECT a.*,b.username,b.user_id,b.group_id,b.email as salesmanemail,d.email,d.phone1,e.subject,e.subject1,e.content,e.embed_template FROM todolist_frontend as a LEFT JOIN users_backend as b ON a.salesmanid=b.user_id LEFT JOIN customer as c ON c.customerid=a.customerid LEFT JOIN customer_address as d ON d.customerid=a.customerid LEFT JOIN admin_email_action as e ON a.combination_id=e.combination_id where a.todolistid='$todolistid'"; 
      }else if($topicid == 2){ 
       $query2="SELECT a.*,b.username,b.user_id,b.group_id,b.email as salesmanemail,d.email,d.phone1,e.subject,e.subject1,e.call_info as content FROM todolist_frontend as a INNER JOIN users_backend as b ON a.salesmanid=b.user_id INNER JOIN customer as c ON c.customerid=a.customerid INNER JOIN customer_address as d ON d.customerid=a.customerid INNER JOIN admin_call_action as e ON a.combination_id=e.combination_id where a.todolistid='$todolistid'"; 
      }else if($topicid == 18){ 
       $query2="SELECT a.*,b.username,b.user_id,b.group_id,b.email as salesmanemail,d.email,d.phone1,e.subject,e.subject1,e.call_info as content FROM todolist_frontend as a INNER JOIN users_backend as b ON a.salesmanid=b.user_id INNER JOIN customer as c ON c.customerid=a.customerid INNER JOIN customer_address as d ON d.customerid=a.customerid INNER JOIN admin_managercall_action as e ON a.combination_id=e.combination_id where a.todolistid='$todolistid'"; 
      }else{ 
       $query2="SELECT a.*,b.username,b.user_id,b.group_id,b.email as salesmanemail,d.email,d.phone1,e.content,e.subject1,f.emailname as subject,g.mailername AS mailersubject FROM todolist_frontend as a LEFT JOIN users_backend as b ON a.salesmanid=b.user_id LEFT JOIN customer as c ON c.customerid=a.customerid LEFT JOIN customer_address as d ON d.customerid=a.customerid LEFT JOIN admin_mailer_action as e ON a.combination_id=e.combination_id LEFT JOIN emailtype_backend as f ON e.subject=f.emailid LEFT JOIN mailer_backend AS g ON e.subject = g.mailerid where a.todolistid='$todolistid'"; 
      } 
      $result = $this->execute_flatten($query2); 
      foreach ($result as $res1){ 
       if($res1['topicid'] == 1 && !empty($res1['subject'])){ 
        $subject1 = $res1['subject']; 
        $sub_qry="select emailname from emailtype_backend where emailid=$subject1"; 
        $subject_result=$this->execute_flatten($sub_qry); 
        //echo '<pre>'; print_r($subject_result); echo '</pre>'; 
        $subjecttodo=isset($subject_result[0]['emailname']) ? $subject_result[0]['emailname'] : ''; 
       } 
       if($res1['topicid'] == 2 || $res1['topicid'] == 18){ 
        $subjecttodo=$res1['subject']; 
       } 
       if($res1['topicid'] == 8){ 
        $subjecttodo=$res1['mailersubject']; 
       } 
      } 
      $logresponse[$key]['subjecttodo'] = isset($subjecttodo) ? $subjecttodo : ''; 

     } 
$this->set('logresponse',$logresponse); 
+0

完全按照我的預期工作!謝謝。 – Surya

2

首先檢查你是否得到值代入變量$subjecttodo$leadInfo foreach循環中。然後將這些值分配給Array。

$subjecttodoArray[] = $subjecttodo; 
$leadInfoArray[] = $leadInfo;  

後,在控制器的功能,試圖通過這個陣列設置像你這樣

$this->set('subjecttodo', $subjecttodoArray); 
$this->set('leadInfo', $leadInfoArray); 

然後嘗試打印內部視圖陣列值這樣

echo "<pre>"; 
print_r($subjecttodo); 
echo "</pre>"; 

echo "<pre>"; 
print_r($subjecttodo); 
echo "</pre>"; 

希望這有助於。

+0

如果你看到我的代碼,你可以看到我做了同樣的事情,但是我面臨的問題是當我檢查它時我得到空值。 – Surya

+1

'$ subjecttodo = $ res1 ['subject']; ... $ this-> set('subjecttodo',$ subjecttodo);'在這個問題中,你正在循環中覆蓋這個變量 - 這個答案附加到一個循環中的變量並調用一次。事實上,在這個問題中,它看起來像使用相同的變量鍵名稱多次(多於2次)調用'set'。無論您使用_last_設置這些變量,您都會在視圖中看到。 – AD7six