propelorm/PropelBundle (Propel 1.6) および MySQL (宣言された外部キーを持つ InnoDB) で Symfony 2 を使用しており、次のようにカスタム SQL を使用して propel オブジェクト コレクションをハイドレートするセクションに示すようにカスタム SQL を使用しています。
$con = Propel::getConnection(VerbNounPeer::DATABASE_NAME);
$sql = "SELECT verb_noun.*, verb.* FROM verb_noun"
." JOIN verb ON verb_noun.verb_id = verb.id";
$stmt = $con->prepare($sql);
$stmt->execute();
$formatter = new PropelObjectFormatter();
$formatter->setClass('Company\SiteBundle\Model\VerbNoun');
$verb_nouns = $formatter->format($stmt);
注: これは実際のクエリではありません。要件を説明するために簡単な例を示しました。私の実際のクエリはより複雑であるため、推進メソッドではなく「カスタム SQL」を使用する必要があります。
結合されたテーブルの列を一度に推進オブジェクト コレクションにハイドレートすることはできませんでした。結合されたテーブル (「動詞」) の列は、データベースへの追加のクエリを通じて必要な場合にのみビューに読み込まれます (これは遅延読み込みと呼ばれるもので、私は望んでいません)。後でデータベースへの多数のクエリを排除するために、上記の最初のクエリで結合されたテーブル ('動詞') の列で propel オブジェクト コレクション ($verb_nouns) をハイドレートする方法はありますか?
上記のコードを以下のコード (Twig のビュー ファイル内) と一緒に使用すると、foreach ステートメントのループごとに 1 つのデータベース接続が作成されます。
{% for verb_noun in verb_nouns %}
<li>{{ verb_noun.NounId }}. {{ verb_noun.verb.Name }}</li>
{% endfor %}