2012-07-21 158 views
1

我有3個表:Zend_Db的查詢連接兩個表

用戶[ID,姓名,用戶名,密碼,角色]

事件[ID,日期,地點,名稱]

參與者[ id,userId,eventId]

我想選擇給定用戶參與的所有事件。爲此,我創建了一個SQL查詢,我測試並返回了所需的結果。

SELECT * FROM event 
INNER JOIN participant ON participant.eventId = event.id 
WHERE participant.userId = $id 

這個我試圖把它變成應該根據從本網站的其他職位工作過一個Zend請求後。

public function getEvents($id) 
{ 
    $db = Zend_Db_Table::getDefaultAdapter(); 
    $select = $db->select(); 

    $select->from('event') 
      ->joinInner('participant','participant.eventId = event.id') 
      ->where('participant.userId = ?', $id); 

    $res = $db->query($select)->fetchAll(); 
    return $res; 
} 

我使用「PDO_MYSQL」作爲一個適配器,我沒有與插入到表中,選擇整個表或只是特定的行任何問題。但是,上面的代碼似乎做了一個簡單的fatchall(),我想要什麼。無論我嘗試改變它,它總是返回事件表內容。

我的問題是:有沒有人有一個想法,爲什麼會發生這種情況?

+0

那裏的代碼除了構造查詢外什麼都不做。你可以發佈代碼顯示你如何執行它並獲取結果嗎?我試着查詢你的表結構,它工作得很好。 – drew010 2012-07-21 19:00:31

+0

@ drew010這可能是我的問題的根源。我對zend和php都很陌生。我從我發現的不同教程以及zend頁面上的指南中學習。我正在將查詢轉發到視圖,我只是用for來列出它。這可能是我的問題。你能告訴我我需要做什麼來執行它嗎?我一直在尋找最近的30分鐘,但目前爲止沒有任何工作。 – 2012-07-21 19:36:56

+0

@ drew010好的,我剛纔知道我的問題是什麼。我正在調用一種不同的方法。因爲我有一個名爲getAllEvents的方法,它沒有參數,但我用一個參數調用它,並沒有拋出任何錯誤或警告或任何東西。我現在就看到了。關於結果的執行和獲取,我稍微修改了我的代碼,我希望這樣做會很好,因爲現在它可以工作。 – 2012-07-21 19:54:31

回答

0

下面是一些你可以嘗試:

// this is the action in your controller 
public function testAction() 
{ 
    // call getEvents, assign the result to the view 
    $this->view->results = $this->_getEvents(1); 

} 

protected function _getEvents($id) 
{ 
    $db  = Zend_Db_Table::getDefaultAdapter(); 
    $select = $db->select() 
       ->from('event') 
       ->joinInner('participant','participant.eventId = event.id') 
       ->where('participant.userId = ?', $id); 

    //echo $select; // you can echo the select object to see the resulting query 

    $results = $select->query(); // actually execute the query 

    return $results->fetchAll(); // return all results as an array to caller 
} 

然後,這裏是一些示例代碼放在視圖腳本:

<?php if (sizeof($this->results) == 0): ?> 
<strong>No results found!</strong> 
<?php else: ?> 

Found <?php echo sizeof($this->results) ?> results.<br /><br /> 

<?php foreach($this->results as $result): ?> 
    On <?php echo $result['date'] ?> the user participated in <em><?php echo $result['name'] ?></em> @ <?php echo $result['location'] ?><br /> 
<?php endforeach; ?> 


<?php endif; ?> 

最後,當你越來越熟悉ZF,你會想要創建模型和數據映射器類來獲取數據。您的getEvents函數將駐留在數據映射器類中。

然後,在MVC分離之後,控制器會從數據映射器請求數據映射器,該數據映射器負責與數據庫進行通信並處理結果。控制器獲取從映射器返回的數據,然後將其分配給視圖。你永遠不想從視圖中獲取數據,只顯示控制器給它的數據。

我發現Zend Framework Quickstart在首次使用ZF時非常有幫助。只需閱讀一次,如果您覺得有必要,可以再次瀏覽一遍,然後創建示例應用程序,以便了解它。那是我以前開始使用ZF的原因,它給了我一個比我以前更好的控制器和數據映射器的起點。

一旦您完成了該指南,閱讀參考指南就容易多了,而且更有意義。

+0

這很有用。不好,我不能評分。我也讀過快速入門,它已被證明是有用的。但問題是,在那之後,我開始了一個新的計劃,並開始學習acl部分並添加jquery(這工作並不好),我可能不得不在環球論壇上看看是否找到了解決方案問題也是如此。因此,我返回添加了一些基本功能,並發現自己迷失在我寫的代碼中。所以現在我開始從頭開始,並首先使用基礎知識,希望它能以這種方式發揮作用。 – 2012-07-21 20:13:08