2013-06-11 23 views
0

我目前正在研究一個小型企業管理工具。我只打算稱它爲客戶經理。我有爲客戶創建的課程,發票和付款。我希望能夠在包含來自左連接的字段的結果上使用PDO :: fetchClass獲取付款類對象。我想:如何從PDO外部聯接語句實例化一個php類?

$sql = "SELECT * FROM payments LEFT OUTER JOIN ON payments.invoiceno = invoices.id"; 
    $table = $this->getTableList("Payment", $sql); 

public function getDbObjects($class, $sql = false) 
{ 

    if(!$sql) { 
     $table = strtolower($class).'s'; 
     $sql = "SELECT * FROM $table"; 
    } 

    $stmnt = $this->_databaseConnection->prepare($sql); 
    if ($stmnt->execute()) { 
     $objects = array(); 
     while ($object = $stmnt->fetchObject($class)) { 
      var_dump($object); 
      $objects[] = $object; 
     } 

     return $objects; 
    } 
    return FALSE; 
} 

我得到一個包含所有值的結果集,所以我添加字段從發票到付款,但是當我打電話fetchclass的結果,從支付領域中返回的對象沒有設置。我已經確認他們在結果集中。這可能嗎?我發現了相關的問題,但只能從連接創建2個對象,而不是從連接創建1個。

+0

有什麼的var_dump結果工作? – Jessica

+0

var_dump產生空字段,直到我在測試頁上嘗試它。我忽略了發佈getTableList函數,我爲此道歉。我將這些getTableList和getDbObjects中的代碼直接複製到控制器中,並進行了一些更改並且工作 –

回答

0

我把它直接複製我的函數代碼保存到我的控制器類

$sql = "SELECT * FROM payments LEFT OUTER JOIN invoices ON payments.invoiceno = invoices.id"; 
    //$table = $this->getTableList("Payment", $sql); 
    $stmt = $this->_databaseConnection->query($sql); 
    if ($stmt->execute()) { 
     $objects = array(); 
     while ($object = $stmt->fetchObject('Payment')) { 

      $objects[] = $object; 
     } 


    } 
    $table = $this->getTableList($objects); 


public function getTableList($results) 
{ 
// Fetch all payments from database and store in array 
$results = $this->getDbObjects($objects); 

    // Initialize variables 
    $colNames = array(); $head = ""; $body = ""; 

    // Loop over results to create table data (td) string 
    foreach ($results as $result) { 

     // Fetch associative array from results 
     $row = $result->getListRow(); 

     // Initialize table row string 
     $tableRow = "<tr>"; 

     // Gather column names for table header 
     if(empty($colNames)) $colNames = array_keys($row); 

     //loop over columns to create html table data string 
     foreach ($row as $td) { 

      // Populate table data 
      $tableRow .= "<td>$td</td>"; 

     } 

     // Close table row 
     $tableRow .= "</tr>"; 

     // Add row to table body 
     $body .= $tableRow; 
    } 

    // Gather table header column names 
    foreach ($colNames as $colName) { 
     $head .= "<th>$colName</th>"; 
    } 

    // Construct table 
    return "<table><thead><tr>".$head."</tr></thead><tbody>".$body."</tbody></table>"; 
}