Mysql 为什么此联接查询不能与createQueryBuilder一起使用?
这个很好用Mysql 为什么此联接查询不能与createQueryBuilder一起使用?,mysql,doctrine,silex,Mysql,Doctrine,Silex,这个很好用 SELECT * FROM podcasttags INNER JOIN podcast ON podcasttags.podcastid = podcast.id INNER JOIN tag ON podcasttags.tagid = tag.id 但当我尝试使用doctrine1 createQueryBuilder时,我得到一个错误: $queryBuilder = $this->db->createQueryBuilder()
SELECT * FROM podcasttags
INNER JOIN podcast
ON podcasttags.podcastid = podcast.id
INNER JOIN tag
ON podcasttags.tagid = tag.id
但当我尝试使用doctrine1 createQueryBuilder时,我得到一个错误:
$queryBuilder = $this->db->createQueryBuilder()
->select('pt')
->from('podcasttags', 'pt')
->innerJoin('podcast p ON pt.podcastid = p.id')
->innerJoin('tag t ON pt.tagid = t.id');
$statement = $queryBuilder->execute();
$podcastData = $statement->fetchAll();
警告:缺少的参数2
条令\DBAL\Query\QueryBuilder::innerJoin(),在中调用
C:\xampp\htdocs\FDRPodcast\src\FDRPodcast\Repository\PodcastRepository.php
第49行,并在中定义
C:\xampp\htdocs\FDRPodcast\vendor\doctor\dbal\lib\doctor\dbal\Query\QueryBuilder.php
在线601
警告:缺少的参数3
条令\DBAL\Query\QueryBuilder::innerJoin(),在中调用
C:\xampp\htdocs\FDRPodcast\src\FDRPodcast\Repository\PodcastRepository.php
第49行,并在中定义
C:\xampp\htdocs\FDRPodcast\vendor\doctor\dbal\lib\doctor\dbal\Query\QueryBuilder.php
在线601
注意:未定义变量:join
C:\xampp\htdocs\FDRPodcast\vendor\doctor\dbal\lib\doctor\dbal\Query\QueryBuilder.php
在线606
注意:未定义变量:中的别名
C:\xampp\htdocs\FDRPodcast\vendor\doctor\dbal\lib\doctor\dbal\Query\QueryBuilder.php
在线607
警告:缺少的参数2
条令\DBAL\Query\QueryBuilder::innerJoin(),在中调用
C:\xampp\htdocs\FDRPodcast\src\FDRPodcast\Repository\PodcastRepository.php
第50行,并在中定义
C:\xampp\htdocs\FDRPodcast\vendor\doctor\dbal\lib\doctor\dbal\Query\QueryBuilder.php
在线601
警告:缺少的参数3
条令\DBAL\Query\QueryBuilder::innerJoin(),在中调用
C:\xampp\htdocs\FDRPodcast\src\FDRPodcast\Repository\PodcastRepository.php
第50行,并在中定义
C:\xampp\htdocs\FDRPodcast\vendor\doctor\dbal\lib\doctor\dbal\Query\QueryBuilder.php
在线601
《条令手册》中的一个例子:
$q = Doctrine_Query::create()
->select('u.id')
->from('User u')
->leftJoin('u.Groups g')
->innerJoin('u.Phonenumbers p')
->leftJoin('u.Email e');
因此,您的查询应该如下所示:
$queryBuilder = $this->db->createQueryBuilder()
->select('pt')
->from('podcasttags pt')
->innerJoin('pt.podcast p')
->innerJoin('pt.tag t');
它接着说,“pt.tagid=t.id”之类的东西是不必要的,因为默认情况下,条令关联主键。希望这有帮助。这里的问题是您缺少QueryBuilder的innerJoin方法中的一些参数。
您以错误的方式调用该方法
->innerJoin('podcast p ON pt.podcastid = p.id')
innerJoin方法需要四个参数
SELECT * FROM podcasttags
INNER JOIN podcast
ON podcasttags.podcastid = podcast.id
INNER JOIN tag
ON podcasttags.tagid = tag.id
有了原则,DBAL将是
$queryBuilder = $this->db->createQueryBuilder()
->select('*')
->from('podcasttags', 'pt')
->innerJoin('pt', 'podcast', 'p', 'pt.podcastid = p.id')
->innerJoin('pt', 'tag', 't', 'pt.tagid = t.id');
最后值得注意的是,如果调用QueryBuilder->getSQL()的方法,它将输出使用QueryBuilder对象形成的当前查询。Refer-doctrine与实体一起工作,而不是直接与表一起工作,而off-course innerjoin()调用是错误的。第一个代码块用于doctrine 1,第二个代码块用于doctrine 2。