Symfony中的数据检索和显示

时间:2014-05-26 13:30:03

标签: php symfony doctrine

我是Symfony的新手,我有一个表users,其中包含两列:user_namefirst_name,我想显示名称(user_name& first_name)包含的所有用户{ {1}}:

$search

2 个答案:

答案 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