php设计问题 - Helper会帮忙吗?

时间:2010-11-28 18:18:17

标签: php zend-framework design-patterns zend-db

我必须列出几个来自数据库源A的元素,它们是: team_id,team_name和team_score(为了解释起见翻译)。

我需要循环遍历它们并显示该信息。

所以,我在DAO方面:

public function listOfTeams()
{
  $select = $this->select()
    ->from(array('t'=>'teams'), array('cod_team','name','score'));
  return $this->fetchAll($select);

}

在我的团队控制器上:

public function listAction()
{
  $teamsDao = new TeamsDao();
  $this->view->infoTeam = $teamsDao->listOfTeams();                    
}

在视图中:

<?php for($i = 0; $i < 30; $i++): ?>

  <?php if(isset($this->infoTeam[$i])): ?>

现在,问题是,在每个列出的项目中,我需要添加更多信息。

该信息不是直接来自数据库,而是一些计算的结果。

以比赛完成的百分比为例。 (翻译);

$totalGamesNumber > 0 ? ($gamesDone*100)/$totalGamesNumber : 0);

所以,我需要从数据库中获取总游戏数,然后,对于每个团队,我需要完成游戏的数量,以便我可以显示百分比。

$ gamesDone获得者:

$gameTeamDao->countGamesPerTeam($gameVo, $teamVo);

我被困在这里,因为我无法看到我应该在何处/如何打电话并制定计算百分比的方法,以便让完成的游戏百分比与其他数据一起呈现。< / em>的

我可以从这个泥中得到一些帮助吗?

如果你不得不为此写一个帮手,或多或少,它会是什么样子?

提前致谢, MEM

PS - 如果您需要更详细的信息。我可以提供。我可以伪造一些对我而言的东西,但对于那些想要帮助它的人来说却不是。所以,请告诉我。非常感谢。

更新:将所有帖子翻译成英文以获取帮助。

1 个答案:

答案 0 :(得分:7)

由于您使用的是ZF,因此您可以在表行的类中进行所有这些计算。这是如何做。假设您的团队类名为Application_Model_DbTable_Teams。

class Application_Model_DbTable_Teams extends Zend_Db_Table_Abstract
{
    protected $_name = 'teams'; // table name
    protected $_id = 'teamId'; // table primary key

    // rows returned by fetchAll() will be of this class
    protected $_rowClass = 'Application_Model_DbRow_Teams';

}

然后你需要创建Application_Model_DbRow_Teams类,你将在那里进行额外的计算

class Application_Model_DbRow_Teams extends Zend_Db_Table_Row_Abstract
{
    public $percentGamesDone;

    public function init()
    {
        // This method gets called automatically by ZF when you instantiate a new
        // object from this class
        // This is where you will put your extra calculations, 
        // like percentage games done, etc
        $this->percentGamesDone = $this->getPercentGames();
    }

    public function getPercentGames() 
    {
        $calculation = 3; // replace this with real data
        return $calculation;
    }
}

完成此操作后,您可以直接从视图中使用任何行声明的属性(如percentGameDone),因为它们将在您实例化行时立即计算。