了解PHP致命类型错误“;必须是“的一个实例”;信条symfony组件项目
我正在努力为一份报告奠定基础。 我不熟悉Symfony和学说 因为我使用的是Symfony组件。这使得遵循教程有点困难,因为它们都假定充分使用Symfony框架和条令支持。在我看来,我没有这个。我对ArSessionResistory进行了此方法调用了解PHP致命类型错误“;必须是“的一个实例”;信条symfony组件项目,php,symfony,doctrine-orm,Php,Symfony,Doctrine Orm,我正在努力为一份报告奠定基础。 我不熟悉Symfony和学说 因为我使用的是Symfony组件。这使得遵循教程有点困难,因为它们都假定充分使用Symfony框架和条令支持。在我看来,我没有这个。我对ArSessionResistory进行了此方法调用 public function getpaidata($payer_id) { $row = $this->repository; return $row->getInsurerPaid($payer_id); }
public function getpaidata($payer_id)
{
$row = $this->repository;
return $row->getInsurerPaid($payer_id);
}
在ArSessionResistory中,正在调用的方法是
public function getInsurerPaid(ArSession $payer_id)
{
$insurerPaid = $this->_em->getRepository($this->_entityName)->findBy([
"payer_id" => $payer_id
]);
return $insurerPaid;
}
错误消息如下:
PHP Fatal error: Uncaught TypeError: Argument 1 passed to OpenEMR\Repositories\ArSessionRepository::getInsurerPaid() must be an instance of OpenEMR\Entities\ArSession, integer given, called in C:\oerm_dev\www\dev\mindfulemr4\library\financialreports\src\FinancialSummaryByInsuranceController.php on line 72 and defined in C:\oerm_dev\www\dev\mindfulemr4\repositories\ArSessionRepository.php:26
我不理解ArSessionRepository::getInsurerPaid()方法调用和ArSession之间的关系,ArSession中列出了所有实体以及getter和setter。我希望有人能解释“必须是”错误消息的实例
因为我现在想的是->findBy(数组)应该是ArSession中的一个方法,即使我试图使用内置的findBy(数组)方法。整个项目代码位于此处
更新:
尼科·哈斯是对的,这真的很简单,与教义或符号无关。一旦我改变了这个
getInsurerPaid(ArSession $payer_id)
对这个。我试着跟随其他人的代码,这就是为什么我把它放在那里
getInsurerPaid($payer_id)
一切都按计划进行。错误消失,查询完成。查看Github上更新的回购协议。关于您的错误
PHP Fatal error: Uncaught TypeError: Argument 1 passed to OpenEMR\Repositories\ArSessionRepository::getInsurerPaid() must be an instance of OpenEMR\Entities\ArSession, integer given, called in C:\oerm_dev\www\dev\mindfulemr4\library\financialreports\src\FinancialSummaryByInsuranceController.php on line 72 and defined in C:\oerm_dev\www\dev\mindfulemr4\repositories\ArSessionRepository.php:26
发生此错误的原因是,函数getInsurerPaid()
需要一个ArSession
对象,但当您在函数getpaidata()
中调用它时,您正在向它传递一个整数
相反,您应该编辑getInsurerPaid()
函数以接受整数参数
方法getInsurerPaid()
应该从id返回ArSession
对象,因此您不必要求提供ArSession
对象
关于您的存储库方法
public function getInsurerPaid(int $payer_id)
{
return $this->_em->getRepository($this->_entityName)->findOneBy([
"payer_id" => $payer_id
]);
}
如果要从存储库中检索一行,应使用findOneBy()
方法,因为它将在找到对象时返回对象,否则将返回null
如果要检索多行,则findBy()
方法非常有用,并返回对象的数组
更新的存储库方法
public function getInsurerPaid(int $payer_id)
{
return $this->_em->getRepository($this->_entityName)->findOneBy([
"payer_id" => $payer_id
]);
}
关于实体和存储库的一些澄清
我不理解ArSessionRepository::getInsurerPaid()方法调用和ArSession之间的关系,ArSession中列出了所有实体以及getter和setter
实体表示您的模型,这些类不会直接与数据库交互
存储库是与数据库交互的类。他们负责对数据库执行读/写操作
您的所有实体存储库都继承自Doctrine\ORM\EntityRepository
类,并为您提供了一些与数据库交互的方法(例如findBy()
)因此,您不需要每次创建实体时都重写它。这很简单:当您仅传输整数时,为什么要用ArSession
键入hint参数$payer\u id
?这个错误与Symfony或教义没有任何关系,我为没有抓住简单的问题而道歉。我想我已经清楚地说过我对Symfony和doctor不熟悉。谢谢你的澄清。现在,我了解了存储库的功能。顺便说一句,将其更改为INT会导致新的错误。不过,我将返回到对象建议,看看如何创建一个要发送到其中的对象。不客气。如果你仍然遇到一些问题,请不要犹豫,我们可能会帮助你解决。马努,那太好了。我真的需要一些指导。在真空中学习是困难的。我们如何合作?不幸的是,我不能直接提供帮助,我只是建议如果你仍然有问题,你可以在这个答案的评论中发表(如果它与这个特定的问题有关),或者问另一个问题。干杯