如何在推进查询中添加别名

时间:2011-10-11 12:23:28

标签: php join symfony1 alias propel

在我的symfony 1.4项目中,我有两个连接到同一个表(不同的外键)的查询:

return ArticleQuery::create(null,$criteria)
        ->joinWithArticleCategoryRelatedByNewsCategoryId()
        ->joinWithArticleCategoryRelatedByHelpCategoryId();

我收到错误:     SQLSTATE [42000]:语法错误或访问冲突:1066不唯一的表/别名:'article_category'

如何为此联接添加别名?

2 个答案:

答案 0 :(得分:2)

注意:我使用的是Propel 1.6

将参数传递给join方法应该足够了。

return ArticleQuery::create(null,$criteria)
        ->joinWithArticleCategoryRelatedByNewsCategoryId('news')
        ->joinWithArticleCategoryRelatedByHelpCategoryId('help');

查看生成的BaseArticleQuery.php,了解为您生成了哪些方法。我的一个连接方法如下所示:

/**
 * Adds a JOIN clause to the query using the ArticleKeyword relation
 *
 * @param     string $relationAlias optional alias for the relation
 * @param     string $joinType Accepted values are null, 'left join', 'right join', 'inner join'
 *
 * @return    KeywordQuery The current query, for fluid interface
 */
public function joinArticleKeyword($relationAlias = null, $joinType = Criteria::LEFT_JOIN)

Propel的优点之一是几乎所有东西都有一个具体的方法。因此,如果您的IDE支持代码完成,则可以获得方法支持的参数提示。

答案 1 :(得分:2)

这对我有用:

return ArticleQuery::create()
    ->joinWith('ArticleCategoryRelatedByNewsCategoryId a', Criteria::LEFT_JOIN)
    ->joinWith('ArticleCategoryRelatedByHelpCategoryId b', Criteria::LEFT_JOIN);

在其他情况下 - 您应该尝试升级您的Propel;)