Doctrine_Table Vs类从BaseClass扩展而来

时间:2012-07-17 19:10:16

标签: zend-framework model doctrine

我对这个Doctrine模型概念感到有些困惑,让我们说一个名为“article”的表 Doctrine会生成一个叫做的类 我正在使用Zend框架和Doctrine 1.2

  1. 模型/生成/ BaseArticle.php
  2. 模型/ ArticleTable.php
  3. 模型/ Article.php
  4. 以这种方式调用控制器中的 ArticleTable 是否属实

    $tableArticle = Doctrine::getTable('Article');
    

    然后将其保存在文章对象中,就像这样

     $article = new Article();
     $fArticles = $tableArticle->getFeaturedArticles();
     foreach ($fArticles as $fArticle) {
             $article->fromArray($fArticle);
             echo $article->title
            }
    

    我必须让 Article.php 来调用 ArticleTable ? 然后在控制器中启动 Article.php 对象?

    class Article extends BaseArticle
    {
    
          public function getFArticles()
          {
               $tableArticle = Doctrine::getTable('Article');
               $obj =  $tableArticle->getFeaturedArticles();
              return $obj;
          }
    

1 个答案:

答案 0 :(得分:2)

Article.php不应该调用ArticleTable.php,除非确实需要真正。在表类中,您只能保存由控制器调用的查询,如:

$featuredArticles = ArticleTable::getInstance()->getFeatured() ;

以上代码更简单,您将在任何IDE中自动完成。

不在Article.php中调用查询的原因是您有一天可以更轻松地过渡到Doctrine2。

对于表调用tbl_article或只是文章,doctrine将生成Article.php和BaseArticle.php。不得手动更改基类。

文章类是你的逻辑所在。例如,您获取数据库中所有文章的列表。当您显示它们时,您希望要素文章有一个星形(仅作为示例):

控制器:

$allArticles = ArticleTable::getInstance()->findAll() ;

模板(Smarty版本):

{foreach $allArticles as $article}

  {if $article->isFeatured()}  <img src=.. some image ..>{/if}

  <h5>{$article->title}

{/foreach}

和模型类

class Article extends BaseArticle 
{
    const STATUS_FEATURED = 1 ;

    public function isFeatured()
    {
        return $this->status == self::STATUS_FEATURED ;
    }
}

所有这些只是一些例子,在现实生活中它更有用。

你实际上是想用这个来自theArray($ fArticle)做什么?我没有看到该代码的任何意义。