php 既不是属性“病人”,也不是连接表Symfony 6的方法之一

lsmd5eda  于 12个月前  发布在  PHP
关注(0)|答案(1)|浏览(107)

我尝试在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()”都不存在,也不具有公共访问权限。

v6ylcynt

v6ylcynt1#

学习一些基本的调试技术将帮助你了解下一步该做什么。2一些简单的事情,比如从模板中转储data值,将告诉你内部结构是什么样子。
在你的循环之前(例如在{% for item in data %}之前)添加一个dump命令:

{{ dump(data) }}

字符串
然后结构将是显而易见的。
您也可以在控制器中使用php函数dump($data);。这将把变量添加到Symfony工具栏中进行检查。使用php函数dd($data);将直接将内容转储到浏览器,然后停止程序执行的其余部分(例如“dump and die”)。
更多信息请参见Symfony的文档:https://symfony.com/doc/current/components/var_dumper.html
最后,您可以通过使用存储库方法或querybuilder来使用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 %}


现在你的变量有意义了。你的patientPatients的一个示例,并且拥有它的所有属性和方法。你可以直接引用每个属性和方法:

{% 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,因为该类的一个示例表示 * 一个患者 *,而不是整个集合。
祝你好运!

相关问题