Php 如何显示数据库中多行的形式
我正在尝试构建一个表单,该表单显示患者列表,其中包含来自多个表的数据。但是我不知道如何显示来自不同表的多条记录 我想我已经掌握了这个设置的基本知识。我只是不知道如何填补控制器中的空白,以使其协同工作。我在WorklistRepository中的查询似乎没有返回我期望的数据 ExtractionFormType.phpPhp 如何显示数据库中多行的形式,php,symfony,doctrine,Php,Symfony,Doctrine,我正在尝试构建一个表单,该表单显示患者列表,其中包含来自多个表的数据。但是我不知道如何显示来自不同表的多条记录 我想我已经掌握了这个设置的基本知识。我只是不知道如何填补控制器中的空白,以使其协同工作。我在WorklistRepository中的查询似乎没有返回我期望的数据 ExtractionFormType.php class ExtractionFormType extends AbstractType { public function buildForm(FormBuilderI
class ExtractionFormType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('first_name', TextType::class, ['disabled' => 'true'])
->add('accession_number', TextType::class, ['disabled' => true])
->add('extraction_number', TextType::class, ['disabled' => true])
->add('elution_volume', IntegerType::class, ['attr' => array('style' => 'background-color: rgb(255, 255, 153)'), 'data'=> 30])
->add('sample_volume', IntegerType::class, ['attr' => array('style' => 'background-color: rgb(255, 255, 153)'), 'data'=> 1])
->add('qubit_reading', IntegerType::class, ['disabled'=> true])
->add('dilution_volume', NumberType::class, ['disabled' => true])
->add('hydration_volume', NumberType::class, ['disabled' => true])
->add('final_concentration', NumberType::class, ['disabled' => true])
->add('final_volume', NumberType::class, ['disabled' => true]);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => ExtractionFormModel::class
]);
}
}
ExtractionFormModel.php
class ExtractionFormModel
{
public $first_name;
public $accession_number;
public $extraction_number;
public $elution_volume;
public $sample_volume;
public $qubit_reading;
public $dilution_volume;
public $hydration_volume;
public $final_concentration;
public $final_volume;
}
我有5个表需要从中获取数据以填充表单。
工作列表
样品提取
病人样本
医嘱
病人
在WorklistRepository中,我创建了一个查询这些表的函数,但调试它时,除了返回有关工作列表本身的数据外,并没有显示它返回了任何内容
WorklistRepository.php
public function getWorklistDetails(int $id): ?array {
return $this->createQueryBuilder('wd')
->leftJoin('wd.sampleExtractions', 'se')
->leftJoin('se.PatientSample', 'ps')
->leftJoin('ps.patientOrders', 'po')
->leftJoin('ps.patient', 'p')
->where('wd.id = :id')->setParameter('id', $id)
->getQuery()
->execute();
}
WorklistController.php
我现在只是在工作列表控制器中使用显示路由。我可以让表单显示,但显然没有数据
/**
* @Route("/{id}", name="worklist_show", methods={"GET"})
* @param Request $request
* @param Worklist $worklist
* @return Response
*/
public function show(Request $request, Worklist $worklist): Response
{
$form = $this->createForm(ExtractionFormType::class);
$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid()) {
return $this->redirectToRoute('worklist_index');
}
return $this->render('worklist/show.html.twig', [
'form' => $form->createView()
]);
以下是您的代码片段:
public function show(Request $request, $id): Response
{
$em = $this->getDoctrine()->getManager();
$worklist= $em->getRepository('App:Worklist')->getWorklistDetails($id);
if(null === $worklist) {
return $this->createNotFoundException('Worklist with id ' . $id . ' not found!');
}
$form = $this->createForm(ExtractionFormType::class, $worklist);
//...
首先要弄清楚为什么您的查询似乎不起作用。它的编写方式应该返回一个包含一个Worklist实体的数组,提取实体存储在Worklist::sampleExtractions中。一旦您了解了这一点,那么您可能需要一个WorklistFormType,它是ExtractionFormTypes中的一个。我意识到这是在调试期间返回一个工作列表实体,我想可能我只是不知道如何从查询中访问其余的数据,因为我可以看到工作列表的名称,但看不到来自联接的任何详细信息。我做了类似的事情-在你的代码中,它说没有getWorklistDetails.`$worklist=$worklistRepository->getWorklistDetails($worklist->id);`我收到一个错误。传递给Symfony\Component\Form\Form::createView()的参数1必须是Symfony\Component\Form\FormView的实例,或者为null,给定字符串。如果错误是没有函数getWorklistDetails,则您知道存储库一定出了问题。实体文件工作流是否具有正确的注释?您使用的是哪个版本的Symfony?谢谢您的帮助,我正在将存储库作为参数传递给show()函数,并尝试以这种方式访问它。我不知道它需要注释,并且可以按照您向我展示的方式进行访问。我正在使用Symfony 4.3。