我正在尝试使用 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 对象,只是一个查询原始结果的数组。
那么我怎样才能只用一个查询得到两个(或更多)连接表的填充推进对象?
谢谢,
日本
最佳答案
您应该有一个 CommentPeer::doSelectJoinArticle()
方法,可以用来执行此操作。如果你不这样做,那么你可能没有在你的数据库模式中使用 MySQL 的 InnoDB 存储引擎或外键引用,这是我强烈推荐的——它不仅允许 Propel 将这些额外的 JOIN 方法添加到它生成的模型代码中, 但您将从 ACID-compliant 中获得很多好处数据库。
另一种方法是自己编写 CommentPeer::doSelectJoinArticle()
方法 - this link会描述过程,但是过程的长度可能会让你选择第一个选项:)
关于php - 如何在 symfony (Propel) 中加入一个表并通过一个查询从两个表中检索对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2525105/