我尝试在Symfony 6中通过一个关系列连接两个表,其中一个表与另一个表具有OneToMany关系。
这是我的控制器逻辑
#[Route('/admin/patients', name: 'app_patients')]
public function patients(PatientsRepository $patients, EntityManagerInterface $entityManager): Response
{
$query = $entityManager->createQuery(
'SELECT patients, patientsInfo
FROM App\Entity\Patients patients
JOIN App\Entity\PatientsInformation patientsInfo
WHERE patientsInfo.patientID = patients.id'
);
$data = $query->getResult();
return $this->render('main/tables.html.twig', ['data' => $data]);
}
字符串
我的小树枝模板
{% for item in data %}
<tr>
<td>{{ item.patient.id }}</td>
<td><i class="fas fa-user-nurse fs-5"></i> {{ item.patient.name }}</td>
<td>{{ item.patientsInfo.nationality }}</td>
<td>{{ item.patient.unhcrID }}</td>
<td>No</td>
<td>{{ item.patient.creationDate|date('Y-m-d') }}</td>
<td>None</td>
<td>
<a class="btn btn-primary" role="button">More</a>
<a class="btn btn-danger" role="button">Delete</a>
</td>
</tr>
{% endfor %}
型
它抛出的错误是
在类“App\Entity\Patients”中,属性“patient”和方法“patient()"、“getpatient()"/“ispatient()"/“haspatient()”或“__call()”都不存在,也不具有公共访问权限。
1条答案
按热度按时间v6ylcynt1#
学习一些基本的调试技术将帮助你了解下一步该做什么。2一些简单的事情,比如从模板中转储
data
值,将告诉你内部结构是什么样子。在你的循环之前(例如在
{% for item in data %}
之前)添加一个dump命令:字符串
然后结构将是显而易见的。
您也可以在控制器中使用php函数
dump($data);
。这将把变量添加到Symfony工具栏中进行检查。使用php函数dd($data);
将直接将内容转储到浏览器,然后停止程序执行的其余部分(例如“dump and die”)。更多信息请参见Symfony的文档:https://symfony.com/doc/current/components/var_dumper.html
最后,您可以通过使用存储库方法或querybuilder来使用DQL收集数据。下面是一个查询生成器示例:
型
您的结果将是
patients
的集合。将其作为
['patients' => $patients]
分配给模板循环:
型
现在你的变量有意义了。你的
patient
是Patients
的一个示例,并且拥有它的所有属性和方法。你可以直接引用每个属性和方法:型
您还应该考虑将
Patients
实体更改为Patient
,因为该类的一个示例表示 * 一个患者 *,而不是整个集合。祝你好运!