php - 如何在 symfony (Propel) 中加入一个表并通过一个查询从两个表中检索对象

标签 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 个查询来完成它。第一个获取评论行,下一个获取链接到评论行的文章行。

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

加入他们
$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/

相关文章:

在 Symfony 1 中 PHP 警告 "Warning: ob_start(): function ' '未找到或无效的函数名称?

php - 无法运行 propel :build-model in Symfony 1. 4 和 PHP 5.3,PHP fatal error :允许的内存大小

php - FFMpeg - 为视频文件创建缩略图

php - MySQL 特定查询不起作用

php - 如何在我的表中获取最接近当前日期的行?

php - 查询语法在 PhpMyAdmin 中工作正常,但在 PHP 中不行

php - Doctrine 2.0 entitymanager->replace() 等效

php - jquery、json 和成功函数

php - 在 php/mysql 中跟踪时间冲突的正确算法是什么?

javascript - 在 JavaScript/jQuery 中使用 Canvas 显示图像