1

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

假设我做这个简单的事情:

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

Symfony 将调用 2 个查询来完成这项工作。第一个获得评论行,下一个获得链接到评论行的文章行。

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

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

但是当我尝试使用 Article 对象时

$comment->getArticle()

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

那么,如何仅通过一个查询获得两个(或更多)连接表的填充推进对象?

谢谢,

J.P

4

1 回答 1

2

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

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

于 2010-03-26T17:20:18.553 回答