我尝试使用Doctrine DQL创建搜索查询。我必须通过提供者标准搜索多个表格。
问题是,它什么都不返回。知道那些符合条件的行。
这是我的疑问:
public function getResults($query)
{
$q = $this->em->createQuery(
"
select u, pr, t, ex
from Zgh\FEBundle\Entity\User u,
Zgh\FEBundle\Entity\Product pr,
Zgh\FEBundle\Entity\Tip t,
Zgh\FEBundle\Entity\Experience ex
where u.firstname like :crit
or pr.name like :crit
or t.title like :crit
or ex.title like :crit
"
);
$q->setParameter("crit", "%" . strtolower($query) . "%");
return $q->execute();
}
这是我的控制器动作:
public function postSearchAction(Request $request)
{
$query = $request->query->get("q");
$result = $this->get("zgh_fe.search_manager")->getResults($query);
var_dump($query);
var_dump($result);
die;
}
注意当我从查询中删除最后两个表时,它会返回结果。
public function getResults($query)
{
$q = $this->em->createQuery(
"
select u, pr
from Zgh\FEBundle\Entity\User u,
Zgh\FEBundle\Entity\Product pr,
where u.firstname like :crit
or pr.name like :crit
"
);
$q->setParameter("crit", "%" . strtolower($query) . "%");
return $q->execute();
}
生成的SQL查询:https://gist.github.com/rafaeladel/2f37748a732c9393a07f