如何在symfony(Propel)中连接表,并使用一个查询从两个表中检索对象

时间:2010-03-26 16:55:02

标签: php mysql symfony1 propel

我正在尝试使用Propel(在Symfony内部)从两个连接的Mysql表中获取数据的简单方法,但是在一个查询中。

让我说我做的很简单:

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

Symfony会调用2个查询来完成。第一个获取Comment行,下一个获取Article行链接到注释一。

现在,我正在尝试找到一种方法在一个查询中完成所有这些操作。我试图使用

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

但是当我尝试使用

获取Article对象时
$comment->getArticle()

它仍会发出查询以获取文章行。我可以轻松地清除所有选定的列并选择我需要的列,但这不会给我我想要的Propel对象,只是查询原始结果的数组。

那么如何只用一个查询来获得两个(或更多)连接表的填充推进对象?

谢谢,

JP

1 个答案:

答案 0 :(得分:2)

您应该使用CommentPeer::doSelectJoinArticle()方法,可以使用此方法。如果你不这样做,那么你可能没有在你的数据库模式中使用MySQL的InnoDB存储引擎或外键引用,这是我强烈建议的 - 它不仅允许Propel将这些额外的JOIN方法添加到其生成的模型代码中,但您将从ACID-compliant数据库中获得许多好处。

另一种方法是自己编写CommentPeer::doSelectJoinArticle()方法 - this link将描述该过程,但过程的长度可能会让您选择第一个选项:)