【问题标题】:How to join a table in symfony (Propel) and retrieve object from both table with one query如何在 symfony (Propel) 中加入表并通过一个查询从两个表中检索对象
【发布时间】:2010-03-26 16:55:02
【问题描述】:

我正在尝试一种简单的方法来使用 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 对象,只是一个查询原始结果的数组。

那么我怎样才能通过一个查询获得两个(或多个)连接表的填充推进对象?

谢谢,

日本

【问题讨论】:

    标签: php mysql symfony1 propel


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢,不知道有这种方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-25
    • 2020-12-12
    • 1970-01-01
    • 1970-01-01
    • 2018-05-26
    • 1970-01-01
    相关资源
    最近更新 更多