首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Join 3表与doctrine 2查询生成器

Join 3表与doctrine 2查询生成器
EN

Stack Overflow用户
提问于 2014-12-19 15:25:49
回答 1查看 2.6K关注 0票数 1

嘿,伙计们,我有三张桌子

代码语言:javascript
复制
1) expert_class
2) expert_location
3) expert

我想从我所知道的mysql查询的所有三个表中获取数据

代码语言:javascript
复制
select * from expert_class class 
join expert_location loc 
on loc.expert_id = class.expert_id 
join expert e 
on class.expert_id = e.id 
where e.is_delete=0

使用这个查询,我得到了我想要的所有数据,但问题是我必须使用doctrine查询构造器来编写这个查询,我尝试了这样

代码语言:javascript
复制
$classes = $this->qb
                    ->add('select', 'exp_cls,exp_loc.id as location_id')
                    ->from('Entity\expert_class','exp_cls')
                    ->join('Entity\expert_location', 'exp_loc')
                    ->join('Entity\expert', 'exp')
                    ->where('exp_cls.expert_id = exp.id')
                    ->AndWhere('exp_cls.expert_id = exp_loc.expert_id')
                    ->AndWhere('exp.is_delete = 0')
                    ->getQuery()
                    ->getArrayResult(); 

当我尝试运行这个查询时,我得到了这个致命的错误

代码语言:javascript
复制
Fatal error: Uncaught exception 'Doctrine\ORM\Query\QueryException' with message 'SELECT exp_cls,exp_loc.id as location_id FROM Entity\expert_class exp_cls INNER JOIN Entity\expert_location exp_loc INNER JOIN Entity\expert exp WHERE exp_cls.expert_id = exp.id AND exp_cls.expert_id = exp_loc.expert_id AND exp.is_delete = 0' in C:\xampp\htdocs\projectname\application\libraries\Doctrine\ORM\Query\QueryException.php:39 Stack trace: #0 C:\xampp\htdocs\projectname\application\libraries\Doctrine\ORM\Query\Parser.php(396): Doctrine\ORM\Query\QueryException::dqlError('SELECT exp_cls,...') #1 C:\xampp\htdocs\projectname\application\libraries\Doctrine\ORM\Query\Parser.php(2363): Doctrine\ORM\Query\Parser->syntaxError('Literal') #2 C:\xampp\htdocs\projectname\application\libraries\Doctrine\ORM\Query\Parser.php(2550): Doctrine\ORM\Query\Parser->Literal() #3 C:\xampp\htdocs\projectname\application\libraries\Doctrine\ORM\Query\Parser.php(2485): Doctrine\ORM\Query\Parser-> in C:\xampp\htdocs\projectname\application\libraries\Doctrine\ORM\Query\QueryException.php on line 44

我也查了这个链接Doctrine query builder using inner join with conditions,但没有帮助

EN

回答 1

Stack Overflow用户

发布于 2014-12-19 15:50:13

你在你的实体中定义关系了吗?例如:

代码语言:javascript
复制
/**
 * @var ArrayCollection
 *
 * @ORM\OneToMany(targetEntity="expert_location", mappedBy="locations")
 */
private $location;

如果你这样做了,那么你必须在你的连接中使用这些连接,例如:

代码语言:javascript
复制
->join('exp_cls.locations', 'exp_loc')  // This joins the expert_location entity

如果你没有,那么你应该添加一个ON条件:

代码语言:javascript
复制
use Doctrine\ORM\Query\Expr\Join;

...

->join('Entity\expert_location', 'exp_loc', Join::ON, $qb->expr()->eq('exp_loc.expert_id', 'exp_cls.expert_id '))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27561460

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档