【问题标题】:i need convert SQL query to Doctrine Query Builder我需要将 SQL 查询转换为 Doctrine Query Builder
【发布时间】:2020-07-30 17:55:32
【问题描述】:

我有一个多对多关系,我的数据库中的表是:

  • 文章:(id,titre,description,category,createAt)
  • article_groupe_auteur:(article_id,groupe_auteur_id)
  • groupe_auteur : (id,nom,prenom,adress,institution,city)

我需要检索作者所依赖的文章。

Sql 查询

use RevueProject;
 select nom_auteur,prenom_auteur,nom_ins,adresse_ins from groupe_auteur ga
     INNER JOIN
                article_groupe_auteur aga on groupe_auteur.id = aga.groupe_auteur_id
     INNER JOIN article a on aga.article_id = a.id
                where  a.id=21;

Dql查询

 public function SelectArticleAuthors2(int $Id){

  return $this->createQueryBuilder('GA');
              ->innerJoin('article_groupe_auteur','aga', Join::WITH , 'aga = ga.groupe_auteur_id')
              ->innerJoin('article','a',Join::WITH , 'a = aga.article_id')
              ->where('aga.article_id = : Id')
              ->setParameter('Id', $Id);
              ->getQuery()->getResult()
}

【问题讨论】:

  • 你的entities真的有名为groupe_auteur_idproperties吗?或者您是否将它们正确设置为一对/多对多/一对关系?我觉得很奇怪。通常你可以通过innerJoin('GA.articles', 'a') 或类似的方式加入,因为条件会被定义的关系隐含。
  • 嘿 Jukumi 我在我的实体中没有 groupe_auteur_id 它在由我尝试的关系 ManyToMany 创建的新表中的唯一属性; innerJoin('GA.articles', 'a') 但我不知道我错过了什么
  • 那么您可能应该收到一条错误消息?还是只是高兴地返回空结果?
  • 是的,它给出了一个错误:语义错误] 第 0 行,'article_groupe_auteur' 附近的第 53 列:错误:未定义类'article_groupe_auteur'。
  • 查询构建器使用实体及其属性/关系。所以你可以加入innerJoin(ArticleGroupAuteur::class, ...)(如果你的实体是这样调用的),但我发现使用我之前提到的表格更容易。错误也不尽相同,要冷静处理,一一处理。

标签: symfony symfony4 query-builder dql


【解决方案1】:

我如何让作者依赖于多对多关系的指定文章

class GroupeAuteurRepository extends ServiceEntityRepository
{
    /**
     * @return mixed
     */
    public function SelectArticleAuthors(int $id)
    {
        // ga (alias) : GroupeAuteur Entity 
        return $this->createQueryBuilder('ga') 
                    // articles (collection)
                    ->innerJoin('ga.articles','a','WITH','a.id=:id') 
                    ->setParameter('id', $id)
                    ->getQuery()->getResult();
    }
}

【讨论】:

  • with 看起来很奇怪,我会把它放在哪里。但从技术上讲,它是一样的,所以......无论如何;o)
  • 是的,你是对的,但是如果你有任何建议让我知道试试它,它会很好:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-17
  • 2014-04-10
  • 2021-02-04
  • 2015-05-12
  • 1970-01-01
  • 1970-01-01
  • 2018-04-23
相关资源
最近更新 更多