我是Symfony的新手,我有一个表users
,其中包含两列:user_name
和first_name
,我想显示名称(user_name& first_name)包含的所有用户{ {1}}:
$search
答案 0 :(得分:3)
这就像查询和获取数据的完整过程,将结果传递给模板。您需要做的是遵循以下步骤:
1)获取实体的存储库(表)并调用在存储库中创建的自定义搜索功能(当然,您可以合并此步骤和下一步以将所有步骤合并到控制器homeAction
功能中)我假设您的实体名称为Users
public function homeAction(Request $request) {
$session = $this->getRequest()->getSession();
$results = array();
if ($request->getMethod() == 'POST') {
$search_for = $request->get('search');
$em = $this->getDoctrine()->getManager();
$results = $em->getRepository('LoginLoginBundle:Users')->searchPhrase($search_for);
}
return $this->render('LoginLoginBundle:Default:home.html.twig', array(
'results' => $results
));
}
2)现在您需要为您的实体构建一个存储库类,并在其中实现下面的函数 Entity Repository in Symfony (或将下面的代码合并到您的控制器)
public function searchPhrase($phrase) {
$query = $this->createQueryBuilder('U');
$result = $query->where(
$query->expr()->like('U.username', $query->expr()->literal("%$phrase%"))
)
->andWhere(
$query->expr()->like('U.firstName', $query->expr()->literal("%$phrase%"))
)
->getQuery()
->getResult();
return $results;
}
请记住,因为您提到“AND”我使用的是andWhere
,而您可以使用orWhere
;因为你说“包含”我使用了like
表达式和%,这就是你在DQL中创建表达式的方式以下是Doctrine2 expressions的完整列表
3)最后一步是在你的树枝模板中显示结果;我假设你想在表格行中显示它们
<table>
<tr>
<th>Username</th><th>First Name</th>
</tr>
{% if results|length > 0%}
{% for item in results %}
<tr>
<td>{{ item.getUsername }}</td><td>{{ item.getFirstName }}</td>
</tr>
{% endfor %}
{% else %}
<tr>
<td colspan="2">No matching results found!</td>
</tr>
{% endif %}
</table>
希望这会有所帮助
答案 1 :(得分:0)
谢谢你们,但我这对我有用:
$repository = $this->getDoctrine()->getRepository('LoginLoginBundle:Users');
$query = $repository->createQueryBuilder('u')
->where("u.userName LIKE '%".$search_for."%' or u.firstName LIKE '%".$search_for."%'")
->getQuery();
$Myusers = $query->getResult();
if ($Myusers) //test if there are results returned
{
foreach ($Myusers as $user)
{
echo "E-mail : ".$user->getUserName()." -- Name : ". $user->getFirstName()."<br>";
}
}
else
{
echo "No matching results found!!";
}
//end-display