J0kの回答は有益ですが、素人の言葉で質問に実際に答えているわけではありません. ESP。単一の質問と複数の質問について。
違いは、実際には単一のインスタンスと複数のインスタンスではなく、インスタンス化されたインスタンスとインスタンス化されていないインスタンスの違いです。
非常に簡単に:
読み取りまたは操作するオブジェクトのインスタンスがまだない場合は、Table 関数を使用します。
オブジェクトのインスタンスが既にあり、それを保存、更新、またはそれに関する詳細情報 (関連オブジェクト) を取得する場合は、Class 関数を使用します。
多くの場合、テーブル関数はクラス関数からアクセスされます
より複雑に:
多くの場合、適切な設計では、通常の Class メソッドと Table メソッドの両方でメソッドを作成する必要があります。
Purchases と 1 対多の関係を持つ Customer がいるとします (これは Products と 1 対多の関係があります)。
メソッドを記述したり、顧客の製品をすべて取得したいとします。
Customer.class.php で以下を作成します。
public function getProducts(){}
これは、通常のクラスで作成します。これは、顧客を獲得してから、顧客がどのような製品を持っているかにのみ関心があるためです。
これは次のように呼び出すことができます:
Doctrine_Core::getTable('Product')->getByCustomerId($this->get('id')
ここではまだ Product インスタンスを持っていないかもしれませんが、それらを取得したいので、これを Table クラスに入れる必要があります。
これが単純に単一対複数に分類されない理由は、顧客に属するすべての製品を返金する関数を作成する場合です。複数の製品を扱っているかもしれませんが、テーブルだけに機能を作成したくないでしょう。支払い処理業者に API 呼び出しを行う必要がある場合があります。各製品の払い戻し期間、ETC を確認する必要がある場合があります。
代わりに、テーブル関数を作成して適切なデータを取得し、クラス関数を作成してそのデータを操作します。
優れたプログラマーが常にこれを「間違える」ことに注意してください。これは多くの場合、個々のスタイルの問題に帰着します。