Doctrine DQL查询产生错误:预期文字,得到字符串结束

时间:2017-04-08 21:31:39

标签: symfony doctrine php-7 dql symfony-2.5

我目前正在尝试按照使用的课程建立一个博客网站 Symfony 2.5.2。 (PHP -v 7.0)

要检索帖子,我正在使用以下控制器

/**
 * @Route(
 *     "/{slug}",
 *     name = "blog_post"
 * )
 * @Template()
 */
public function postAction($slug)
{

    $PostRepo = $this->getDoctrine()->getRepository('AniaBlogBundle:Post');

    $Post = $PostRepo->getPublishedPost($slug);

    if(null === $Post){
        throw $this->createNotFoundException('Post not found');
    }

    return array(
        'post'=> $Post
    );
}

这是我的getPublishedPost函数:

 public function getPublishedPost($slug){
    $qb = $this->getQueryBuilder(array(
            'status' => 'published'
    ));

   $qb->andWhere('p.slug = :slug')
       ->setParameter('slug', $slug);

    return $qb->getQuery()->getOneOrNullResult();
}

和getQueryBuilder函数:

public function getQueryBuilder(array $params = array()){

    $qb = $this->createQueryBuilder('p')
                    ->select('p, c, t')
                    ->leftJoin('p.category', 'c')
                    ->leftJoin('p.tags', 't');

    if(!empty($params['status'])){
        if('published' == $params['status']){
            $qb->where('p.publishedDate <= :currDate AND p.publishedDate IS NOT NULL')
                ->setParameter('currDate', new \DateTime());
        }else if('unpublished' == $params['status']) {
            $qb->where('p.publishedDate > :currDate OR p.publishedDate IS NULL')
                    ->setParameter('currDate', new \DateTime());
        }
    }

     if(!empty($params['orderBy'])){
         $orderDir = !empty($params['orderDir']) ? $params['orderDir'] : NULL;
         $qb->orderBy($params['orderBy'], $orderDir);
     }

    if(!empty($params['categorySlug'])){
        $qb->andWhere('c.slug = :categorySlug')
                ->setParameter('categorySlug', $params['categorySlug']);
    }

    if(!empty($params['tagSlug'])){
        $qb->andWhere('t.slug = :tagSlug')
            ->setParameter('tagSlug', $params['tagSlug']);
    }

    if(!empty($params['search'])) {
        $searchParam = '%'.$params['search'].'%';
        $qb->andWhere('p.title LIKE :searchParam OR p.content LIKE :searchParam')
            ->setParameter('searchParam', $searchParam);
    }

    return $qb;
}

}

但是我得到500错误说:[语法错误]第0行,第1栏:错误:预期文字,得到字符串结束。

提前感谢您的任何建议!

0 个答案:

没有答案