1

Propel(Symfony内)を使用して、1つのクエリで2つの結合されたMysqlテーブルからデータをフェッチする簡単な方法を取得しようとしています。

私がこの単純なことをしたとしましょう:

$comment = CommentPeer::RetrieveByPk(1);
print $comment->getArticle()->getTitle();
//Assuming the Article table is joined to the Comment table

symfonyはそれを行うために2つのクエリを呼び出します。最初の行はコメント行を取得し、次の行はコメント行にリンクされた記事行を取得します。

今、私は1つのクエリ内でそれらすべてを作成する方法を見つけようとしています。私はそれらに参加しようとしました

$c = new Criteria();
$c->addJoin(CommentPeer::ARTICLE_ID, ArticlePeer::ID);
$c->add(CommentPeer::ID, 1);
$comment = CommentPeer::doSelectOne($c);

しかし、Articleオブジェクトを使用して取得しようとすると

$comment->getArticle()

それでも、Article行を取得するためのクエリを発行します。選択したすべての列を簡単にクリアして必要な列を選択できましたが、それでは目的のPropelオブジェクトが得られず、クエリの生の結果の配列だけが得られました。

では、1つのクエリだけで2つ(またはそれ以上)の結合テーブルの入力されたpropelオブジェクトを取得するにはどうすればよいですか?

ありがとう、

JP

4

1 に答える 1

2

CommentPeer::doSelectJoinArticle()これを行うために使用できるメソッドが必要です。そうでない場合は、データベーススキーマでMySQLのInnoDBストレージエンジンまたは外部キー参照を使用していない可能性があります。これは、Propelが生成されたモデルコードにこれらの追加のJOINメソッドを追加できるようにするだけでなく、私が強くお勧めするものです。 、ただし、 ACID準拠のデータベースから多くのメリットが得られます。

別の方法は、CommentPeer::doSelectJoinArticle()メソッドを自分で作成することです。このリンクはプロセスを説明しますが、プロセスの長さにより、最初のオプションを選択する場合があります:)

于 2010-03-26T17:20:18.553 に答える