在我的symfony项目中,我有一个函数,根据用户的"角色"显示用户列表。这里是控制器代码
/**
* @Route("/admin", name="admin_index", methods={"GET"})
*/
public function index(): Response
{
$Admins=$this->getDoctrine()->getRepository(User::class)->findBy(['roles' => array('["ROLE_ADMIN"]')]);
return $this->render('back/admin/index.html.twig', [
'admins' => $Admins,
]);
}
这是渲染
<table class="table" >
<thead>
<tr>
<th>Id</th>
<th>Nom</th>
<th>Email</th>
<th>Tel</th>
<th>Photo</th>
</tr>
</thead>
<tbody>
{% for admin in admins %}
<tr name="elements" id="{{ 'admin'~ admin.id}}">
<td>{{ admin.id }}</td>
<td>{{ admin.nom }}</td>
<td>{{ admin.email }}</td>
<td>{{ admin.tel }}</td>
<td><a href="{{ asset('/Uploads/Images/' ~ admin.photo) }}">{{ admin.photo }}</a></td>
<td>
</td>
</tr>
{% else %}
<tr>
<td colspan="10">Rien a afficher</td>
</tr>
{% endfor %}
</tbody>
</table>
这里的问题是,即使数据库已满,他也不显示任何内容
这里是实体声明
/**
* @var string
*
* @ORMColumn(name="roles", type="json")
* @Groups ("post:read")
*/
private $roles;
,这是表格结构的截图
输入图片描述
从早上开始我就被卡住了,我不知道为什么
因为roles字段是json,所以findBy不会这样工作。
您应该在您的UserRepository.php
类中创建一个函数,使用QueryBuilder按角色选择用户
public function findByRole($role)
{
return $this->createQueryBuilder('u')
->andWhere('u.roles LIKE :role')
->setParameter('role', "%{$role}%")
->getQuery()
->getResult();
}
你可以从你的控制器中调用这个函数
$admins = $this->getDoctrine()->getRepository(User::class)->findByRole("ROLE_ADMIN");
我还建议您在控制器中使用var_dump($admins);
来查看Doctrine是否首先返回任何内容给您。
你甚至可以转储变量在树枝{{ dump(admins) }}