提问人:hareth py 提问时间:11/11/2023 更新时间:11/11/2023 访问量:25
既不是属性“patient”,也不是连接表Symfony 6的方法之一
Neither the property "patient" nor one of the methods in joining tables Symfony 6
问:
我正在尝试在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 %}
它抛出的错误是
属性“patient”和方法“patient()”、“getpatient()”/“ispatient()”/“haspatient()”或“__call()”都不存在,并且在类“App\Entity\Patients”中具有公共访问权限。
答:
学习一些基本的调试技术将帮助您了解下一步该做什么。像从模板中转储值这样简单的事情,会告诉你内部结构是什么样子的。data
在循环之前(例如,before ),添加一个转储命令:{% for item in data %}
{{ dump(data) }}
然后结构将很明显。
您还可以在控制器中使用 php 函数。这会将变量添加到 Symfony 工具栏进行检查。使用 php 函数会将内容直接转储到浏览器,然后停止程序的其余部分执行(例如“转储并死亡”)。dump($data);
dd($data);
有关更多信息,请参阅 Symfony 的文档:https://symfony.com/doc/current/components/var_dumper.html
最后,使用存储库方法或查询生成器使用 DQL 收集数据将受益匪浅。下面是一个查询生成器示例:
$patients = $this->entityManager
->createQueryBuilder()
->from(Patients::class, 'patients')
->leftJoin('patients.patientInformation', 'information') // guessing on naming here
->select('patients', 'information')
->getQuery()->getResult();
您的结果将是 的集合。patients
将其分配给模板['patients' => $patients]
循环:
{% for patient in patients %}
现在你的变量有意义了。Your 是 的实例,并具有它的所有属性和方法。您可以直接引用每个:patient
Patients
{% for patient in patients %}
<tr>
<td>{{ patient.id }}</td>
<td><i class="fas fa-user-nurse fs-5"></i> {{ patient.name }}</td>
<td>{{ patient.patientInformation.nationality }}</td>
<td>{{ patient.unhcrID }}</td>
<td>No</td>
<td>{{ 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 %}
您还应该考虑将实体更改为类的一个实例代表一个患者,而不是整个集合。Patients
Patient
祝你好运!
评论