创建Query Builder symfony内连接

时间:2016-07-29 14:32:32

标签: mysql symfony orm doctrine-orm

任何人都可以请将此sql查询转换为symfony中的查询构建器。

Select a.* From article a 
Inner Join 
  articles_devis ad On a.id=ad.article_id 
Inner Join 
  devis d On d.id=ad.devis_id 
Inner Join 
  utilisateurs u On u.id=d.user_id 
Where u.id=7 and Where  d.id=63

我试过这行代码,但它没有用

public function ArticlesByDevisByUser(){
        $qb = $this->createQueryBuilder('a')
                ->select('a.*')
                ->from('ArticleBundle:Article', 'a')
                ->innerJoin('a.articledevis', 'ad')
                ->where('articles.id = ad.article')
                ->innerJoin('ad.devis', 'd')
                ->where('d.id = ad.devis')
                ->innerJoin('d.user', 'u')
                ->where('u.id = d.user')
                ->andWhere('u.user=7')
                ->andWhere('d.id=63');
        return $qb->getQuery()->getResult();
    }

1 个答案:

答案 0 :(得分:0)

您必须使用@ORM\Entity注释创建存储库并将其链接到您的文章(如果尚未完成):

在您的文章实体中:

/**
 * @ORM\Entity(repositoryClass="YourProject\YourBundle\Entity\ArticleRepository")
 *
 */
class Article
{
...
}

然后在你的ArticleRepository中放置你的函数:

use Doctrine\ORM\EntityRepository;

class ArticleRepository extends EntityRepository
{
    public function ArticlesByDevisByUser($userId, $devisId)
    {
       return $this->createQueryBuilder('a')
           ->innerJoin('a.articledevis', 'ad')
           ->innerJoin('a.devis', 'ad')
           ->innerJoin('a.user', 'au')
           ->where('ad.id = :devisId')
           ->andWhere('au.id = :userId')
           ->setParameter('userId', $userId)
           ->setParameter('devisId', $devisId)
           ->getQuery()
           ->getResult();
    }
}

我为articledevis添加了devisuserinnerJoin,但这取决于您在Article实体中提供的属性名称