2012-05-16 75 views
0

我使用Zend Framework和phpMyAdmin(MySQL)在PHP中創建留言板。我是一個Zend Framework的初學者,並沒有在PHP中做過多的工作,所以請儘可能簡化您的答案。如何只顯示我的數據庫中某個表的某些行?

我保存了數據庫中留言板的結構(部分,下部分和下部分)。我需要顯示論壇的部分及其相應的underSections。問題是 - 我如何顯示其下的特定部分的底部部分?

IndexController.php

public function indexAction() 
{ 
    $sections = new Model_Sections(); 
    $this->view->sections = $sections->fetchAll(); 

    $undersections = new Model_Undersections(); 
    $this->view->undersections = $undersections->fetchAll(); 
} 

在這段代碼中我獲取所有部分和undersection數據(ID &名)。

數據庫模型Section.php

class Model_Sections extends Zend_Db_Table_Abstract 
{ 
    protected $_name = 'sections'; 
} 

數據庫模型Undersection.php

<div class="section"> 
    <?php foreach($this->sections as $sections) : ?> 

    <!-- Generates names of sections --> 
    <h1><?php echo $this->escape($sections->section_name);?></h1> 

     <!-- Generates names of undersections --> 
     <?php foreach($this->undersections as $undersections) : ?> 
     <div class="underSection"> 
      <h2> 
       <a href=" ***link to some controller according to the undersection*** "> 
       <?php echo $this->escape($undersections->undersection_name);?> 
       </a> 
      </h2> 
     </div> 
     <?php endforeach; ?> 
    <?php endforeach; ?> 
</div> 

目前它:從有關數據輸出的主視圖 「index.phtml」

class Model_Undersections extends Zend_Db_Table_Abstract 
{ 
    protected $_name = 'undersections'; 
} 

片段顯示每個部分下的所有低點。

+1

什麼是你的數據庫結構?您目前沒有任何將部分與底標聯繫在一起的部分 –

+0

部分表具有主鍵「section_id」,它是底部表中的外鍵。 – ositra

回答

1

您的代碼當前顯示每個部分下的所有下標的原因是因爲您使用嵌套的for循環,其中內部循環始終是相同的。即你總是迭代相同的底下集合。您需要爲部分和底部定義一種方法來建立父子關係。

這裏是我會大致結構是:

DB結構(表名:部分):

id INT NOT NULL AUTO_INCREMENT 
parentId INT DEFAULT 0 
section_name TINYTEXT 

所以對於所有部分數據將住在同一個數據庫表。當您插入頂級部分時,您只需保留parentId列= 0.插入底下角色時,您將插入父級部分的ID值。

我也會改變你的模型,所以你沒有Model_Section和Model_Undersection。相反,在Model_Section類中有一個名爲例如getChildren()會返回屬於該特定Model_Section實例的所有部分的集合。

控制器動作:

public function indexAction() 
{ 
    $sections = new Model_Sections(); 
    $this->view->sections = $sections->fetchAll(); 
} 

查看腳本:

<div class="section"> 
    <?php foreach($this->sections as $sections) : ?> 

    <!-- Generates names of sections --> 
    <h1><?php echo $this->escape($sections->section_name);?></h1> 

     <!-- Generates names of undersections --> 
     <?php foreach($sections->getChildren() as $undersections) : ?> 
     <div class="underSection"> 
      <h2> 
       <a href=" ***link to some controller according to the undersection*** "> 
       <?php echo $this->escape($undersections->section_name);?> 
       </a> 
      </h2> 
     </div> 
     <?php endforeach; ?> 
    <?php endforeach; ?> 
</div> 

注意使用$ sections->的getChildren(),而這 - $> undersections

最大的好處變化你從這裏得到的是你的模型現在是完全遞歸的。你的底下可以有自己的孩子部分,等等。

+0

謝謝你的回答,Jens!我會試試看,並留下我的反饋。 我有一個關於你提出的數據庫結構的問題。它不應該也有一個sectionID字段? 'ID INT NOT NULL AUTO_INCREMENT parentId的INT DEFAULT 0 sectionId INT SECTION_NAME TINYTEXT' – ositra

+0

我真的不明白什麼的getChildren()函數會做。請問你能否解釋一下? – ositra

+0

getChildren當然應該在控制器中完成,而不是在視圖中完成。 –

1

你應該設置要選擇哪些列:

class Model_Sections extends Zend_Db_Table_Abstract 
{ 
    protected $_name = 'sections'; 
    public function getSections() 
    { 
     $select = $this->select() 
      ->from($this->_name, array('col1', 'col2')); // set your columns 
     return $this->fetchAll($select); 
    } 
} 

並在控制器:

$sections = new Model_Sections(); 
$this->view->sections = $sections->getSections(); 
相關問題