0

私はこの Doctrine モデルの概念に少し混乱しています。「article」というテーブル が Doctrine という名前のクラスを生成するとしましょう。私は Zend フレームワークと Doctrine 1.2 を使用しています。

  1. モデル/生成/BaseArticle.php
  2. モデル/ArticleTable.php
  3. モデル/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;
      }
4

1 に答える 1

2

本当に本当に必要でない限り、Article.phpはArticleTable.phpを呼び出さないでください。テーブルクラスでは、次のようなコントローラーによって呼び出されるクエリのみを保持します。

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

上記のコードはより単純で、どのIDEでもオートコンプリートが可能です。

Article.phpでクエリを呼び出さない理由は、いつかDoctrine2に簡単に移行できるようになるためです。

テーブル呼び出しtbl_articleまたは単に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 ;
    }
}

これらはすべてほんの一例であり、実際にははるかに便利です。

そして、このfromArray($ fArticle)で実際に何をしようとしていますか?そのコードのポイントはわかりません。

于 2012-07-19T07:23:34.200 に答える