2012-09-17 42 views
0

請看看這段代碼:笨 - 創建從單個查詢兩個或多個結果對象

$query = $this->db->query("SELECT * FROM comments c LEFT JOIN users u ON u.user_id = c.user_id"); 
foreach ($query->result('Comment') as $comment) 
{ 
// $comment holds all data from both tables 
} 

所以,我想是有兩個對象$comment(只爲對象屬性從comments表列)和該評論爲$user有沒有簡單的方法來獲取?

請注意,這是普遍的問題,我需要兩個表中的所有列,有時在一個表中的列可以有名字在其他表中的列。

回答

0

我找到了解決方案whitch我現在工作很細。我需要的一切就是使用PDO。 這裏是我現在的代碼:

$this->db->conn_id->setAttribute(PDO::ATTR_FETCH_TABLE_NAMES, 1); 
$query = $this->db->query("SELECT * FROM comments c LEFT JOIN users u ON u.user_id = c.user_id"); 
foreach ($query->result_array() as $row) 
{ 
    $comment = row2object($row, 'Comment', 'c'); 
    $comment->user = row2object($row, 'User', 'u'); 

    $comments[] = $comment; 
} 

而且row2object()助手:

/** 
* Row to object 
* application/helpers/row2object_helper.php 
* 
* @param array $row 
* @param string $class 
* @param string $from_table alias of table name 
*/ 
function row2object(&$row, $class, $from_table) 
{ 
    $object = new $class; 

    foreach($row as $key => $value) 
    { 
     list($table, $column) = explode(".", $key); 

     if($table == $from_table) 
     { 
      $object->{$column} = $value; 
      unset($row[$key]); 
     } 
     elseif ($table == "" && substr($key, 1, strlen($from_table)) == $from_table) 
     { 
      $column = substr($key, strlen($from_table) + 2); 
      $object->{$column} = $value; 
      unset($row[$key]); 
     } 
    } 

    return $object; 
} 
1

裏面說的foreach,你可以做這樣的事情:

foreach ($query->result('Comment') as $comments) 
{ 
    $comment[$comments->getCommentId()] = $comments->getCommentInfo(); 
    $user[$comments->getCommentId()] = $comment->getUserInfo(); 

} 

而且在評論類,你應該創建一個返回所有的用戶特定數據和具體的評論信息的另一種方法的方法,你也可以在您調用方法時清除當前實例中的信息。
這樣的話,你會得到你在不同的變量想什麼,爲每個評論陣列。

+0

THX,我可以實現類似的東西,但如果表用戶和評論有相同名稱的列,例如'email'? – sasa

+0

您應該使用別名或將字段名稱更改爲類似commentEmail和userEmail的內容。 無論哪種方式,你會在你造成的查詢重命名字段。 別名是創建這樣您的查詢,SELECT comment.email AS commentEmail,user.email AS USEREMAIL,(你需要的所有字段)FROM(...) –