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
从函数返回“本地”字符*与从函数返回“本地”int*之间的区别[重复]