我正在尝试使用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
答案 0 :(得分:2)
您应该使用CommentPeer::doSelectJoinArticle()
方法,可以使用此方法。如果你不这样做,那么你可能没有在你的数据库模式中使用MySQL的InnoDB存储引擎或外键引用,这是我强烈建议的 - 它不仅允许Propel将这些额外的JOIN方法添加到其生成的模型代码中,但您将从ACID-compliant数据库中获得许多好处。
另一种方法是自己编写CommentPeer::doSelectJoinArticle()
方法 - this link将描述该过程,但过程的长度可能会让您选择第一个选项:)