我正在使用一个简单的搜索功能,但问题是我通过 findByTitle 硬编码控制器中的类别标题值,然后将其传递给搜索功能。
Category 与 Post 实体具有 OneToMany/ManyToOne 关系。
已尝试以下但收到以下错误:Error: Call to a member function getTitle() on a non-object
$em = $this->getDoctrine()->getManager();
$query = $this->get('search');
$category = $em->getRepository('AcmeDemoBundle:Category')
->findAll();
$categoryTitle = $em->getRepository('AcmeDemoBundle:Category')
->findByTitle($category->getTitle());
$posts = $query->search($categoryTitle);
我怎样才能动态设置这个值,这样我就不必手动传递它了?
控制器
/**
* Search action
*
* @return array
*
* @Route("/search", name="job1_search")
* @Template("AcmeDemoBundle:Job1:search.html.twig")
*/
public function searchAction()
{
// Search code: calling from the service Search
$em = $this->getDoctrine()->getManager();
$query = $this->get('search');
$categoryTitle = $em->getRepository('AcmeDemoBundle:Category')
->findByTitle('job1');
$posts = $query->search($categoryTitle);
return array(
'query' => $query,
'posts' => $posts['results'],
);
}
搜索服务
public function search($categoryTitle)
{
$results = null;
$query = $this->request->query->get('q');
if (!empty($query)) {
$em = $this->doctrine->getManager();
$results = $em->createQueryBuilder()
->from('AcmeDemoBundle:Post', 'post')
->select('post')
->where('post.category = :category')
->setParameter('category', $categoryTitle)
->andWhere('post.title LIKE :search')
->addOrderBy('post.created', 'DESC')
->setParameter('search', "%${query}%")
->getQuery()
->getResult();
}
return array(
'query' => $query,
'results' => $results,
);
}