1

私は Phalcon の MVC モデルを使用しており、オブジェクトの関係を利用したいと考えています。

私の場合は少し複雑です。ストレージとして機能するデータベース テーブルがあり、それを拡張するモデルがあります。

  1. すべてのタイプの HTML フォーム要素を記述する DB テーブル「html_form_elements」があります。列がidtype、およびlabelであるとしましょう。
  2. 私は抽象クラスを持っています:

    class AbstractHtmlFormElements extends Phalcon\MVC\Model {}

  3. HTMLフォーム要素のタイプごとに1つずつ、一連​​のクラスがあります。

    class Text extends AbstractHtmlFormElements {}

    class Date extends AbstractHtmlFormElements {}

$this->hasMany()タイプの関係を使用して、 TextDate、およびその他すべての特定のオブジェクトをリンクする「コンテナー」クラス HtmlPage が必要です。

$htmlPage->getRelated()機能を利用するために、この状況ですべての依存クラスをロードすることは可能ですか?

同じテーブル「html_form_elements」に対して冗長なクエリが作成されるため、HtmlPage とすべての質問タイプの関係を個別に説明したくありません。異なるモデルを記述しているすべての行を 1 つのクエリでロードすることは可能ですか?

ありがとう!

4

1 に答える 1

0

いくつかの同時関係フォーム 1 モデルの例を次に示します。

class Model_UserTest extends \Phalcon\Mvc\Model {
public function initialize() {
    $this->hasManyToMany(
            "id", "Model_TagToTest", "test_id", "tag_id", "Model_UserTag", "id", array(
        'alias' => 'tags'
    ));
    $this->hasManyToMany(
            "id", "Model_QuestionToTest", "test_id", "question_id", "Model_UserQuestion", "id", array(
        'alias' => 'questions'
    ));
    //  $this->hasMany("id", "RobotsParts", "robots_id");
    $this->hasOne(
            "id", "Model_UserTestPrintSettings", "test_id", array(
        'alias' => 'printSettings'
    ));
}
    }

私が関連付けるために使用するのはエイリアスです。例えば

$m = Model_UserTest::findFirst();
$m->tags; // to get all related tags from model Model_UserTag they are connected by table Model_TagToTest

必要なすべての接続について説明します。Phalcon は、SQL を可能な限り高速に動作させるほどスマートです。モデルレイヤーを使用している場合は、実際のSQLについてあまり考えないでください。アプリケーションを開発した後は、常にスロー クエリ ログを収集し、ログがある場合はインデックスを追加します。99% の確率で、ウェブページの応答速度を維持するために必要なのはそれだけです。

この場合、私の要約は次のようになります。問題がない場合は、問題について考えないでください。

ちなみに、サーバーの監視にはNew Relicサービスをお勧めしますhttp://newrelic.com/

于 2014-02-12T08:03:42.523 に答える