Doctrine_Table 与从 BaseClass 扩展的类

Posted

技术标签:

【中文标题】Doctrine_Table 与从 BaseClass 扩展的类【英文标题】:Doctrine_Table Vs class That extends from BaseClass 【发布时间】:2012-07-17 19:10:15 【问题描述】:

我对这个 Doctrine 模型概念有点困惑,假设我们有一个名为 "article" 的表格 Doctrine 将生成名为 我正在使用 Zend 框架和 Doctrine 1.2

    models/generated/BaseArticle.php models/ArticleTable.php models/Article.php

这样在控制器中调用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;
      

【问题讨论】:

@Gediminas 因为我认为很难从 Doctrine 1.2 轻松转到 Doctrine 2 【参考方案1】:

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

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

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

不在 Article.php 中调用查询的原因是有一天你会更容易过渡到 Doctrine2。

对于一个表调用 tbl_article 或只是文章,学说将生成 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 ;
    

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

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

【讨论】:

好的,那么它会返回ArticleTable的对象吗?我必须这样做 $article->fromArray($fArticle);在控制器中? 你能告诉我Article.php是干什么用的

以上是关于Doctrine_Table 与从 BaseClass 扩展的类的主要内容,如果未能解决你的问题,请参考以下文章

使用 Environment.ExitCode 与从 Main 返回 int

JOIN 与从许多表中选择

从函数返回“本地”字符*与从函数返回“本地”int*之间的区别[重复]

从 Xcode 在设备上构建与从 TestFlight 下载 - 问题

将自定义委托与从 QTableView 派生的类一起使用

Mysql(MariaDB)每次查询与从视图中读取?