这很好用
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 调用的是Doctrine \ DBAL \ Query \ QueryBuilder :: innerJoin() C:\ XAMPP \ htdocs中\ FDRPodcast的\ src \ FDRPodcast \库\ PodcastRepository.php 在第49行并在中定义 C:\ XAMPP \ htdocs中\ FDRPodcast \供应商\原则\ DBAL \ LIB \原则\ DBAL \查询\ QueryBuilder.php 在第601行
警告:缺少参数3 调用的是Doctrine \ DBAL \ Query \ QueryBuilder :: innerJoin() C:\ XAMPP \ htdocs中\ FDRPodcast的\ src \ FDRPodcast \库\ PodcastRepository.php 在第49行并在中定义 C:\ XAMPP \ htdocs中\ FDRPodcast \供应商\原则\ DBAL \ LIB \原则\ DBAL \查询\ QueryBuilder.php 在第601行
注意:未定义的变量:加入 C:\ XAMPP \ htdocs中\ FDRPodcast \供应商\原则\ DBAL \ LIB \原则\ DBAL \查询\ QueryBuilder.php 在第606行
注意:未定义的变量:别名in C:\ XAMPP \ htdocs中\ FDRPodcast \供应商\原则\ DBAL \ LIB \原则\ DBAL \查询\ QueryBuilder.php 在第607行
警告:缺少参数2 调用的是Doctrine \ DBAL \ Query \ QueryBuilder :: innerJoin() C:\ XAMPP \ htdocs中\ FDRPodcast的\ src \ FDRPodcast \库\ PodcastRepository.php 在第50行并在中定义 C:\ XAMPP \ htdocs中\ FDRPodcast \供应商\原则\ DBAL \ LIB \原则\ DBAL \查询\ QueryBuilder.php 在第601行
警告:缺少参数3 调用的是Doctrine \ DBAL \ Query \ QueryBuilder :: innerJoin() C:\ XAMPP \ htdocs中\ FDRPodcast的\ src \ FDRPodcast \库\ PodcastRepository.php 在第50行并在中定义 C:\ XAMPP \ htdocs中\ FDRPodcast \供应商\原则\ DBAL \ LIB \原则\ DBAL \查询\ QueryBuilder.php 在第601行
答案 0 :(得分:1)
Doctrine手册中的一个例子:
$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”这样的东西是不必要的,因为Doctrine默认关联主键。希望这会有所帮助。
答案 1 :(得分:0)
这里的问题是你缺少来自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
使用Doctrine 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对象形成的当前查询。