1

我正在使用可翻译的KnpLabs/DoctrineBehaviors。我有一个Post实体和一个BlogCategory实体。

Post.php

class Post
{
    use Timestampable;

    /**
     * @ManyToMany(targetEntity="BlogCategory")
     * @JoinTable(name="post_categories")
     * @var ArrayCollection
     */
    protected $categories;

    ...
}




class BlogCategory
{
    use Translatable;

    /**
     * @Id()
     * @GeneratedValue(strategy="AUTO")
     * @Column(type="integer")
     * @var int
     */
    private $id;

     ...
}




class BlogCategoryTranslation
{
    use Translation;

    /**
     * @Column()
     * @NotBlank()
     * @var string
     */
    protected $name;

    ...
}

我想显示相关类别的帖子。但现在我有很多疑问。

如何在多对多关联中加入翻译以优化查询计数?

4

1 回答 1

2

您正在寻找的是翻译的 LEFT JOIN:

SELECT post, category, category_trans
FROM Post post
LEFT JOIN post.categories category
LEFT JOIN category.translations category_trans

如果您只想选择当前语言的翻译:

LEFT JOIN category.translations category_trans WITH category_trans.locale = :locale

(将locale参数绑定到查询)。

如果您使用的是查询生成器:

->leftJoin('category.translations', 'category_trans', 'WITH', category_trans.locale = :locale)
于 2015-05-23T19:04:42.993 回答