Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
了解PHP致命类型错误“;必须是“的一个实例”;信条symfony组件项目_Php_Symfony_Doctrine Orm - Fatal编程技术网

了解PHP致命类型错误“;必须是“的一个实例”;信条symfony组件项目

了解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); }

我正在努力为一份报告奠定基础。 我不熟悉Symfony和学说 因为我使用的是Symfony组件。这使得遵循教程有点困难,因为它们都假定充分使用Symfony框架和条令支持。在我看来,我没有这个。我对ArSessionResistory进行了此方法调用

 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会导致新的错误。不过,我将返回到对象建议,看看如何创建一个要发送到其中的对象。不客气。如果你仍然遇到一些问题,请不要犹豫,我们可能会帮助你解决。马努,那太好了。我真的需要一些指导。在真空中学习是困难的。我们如何合作?不幸的是,我不能直接提供帮助,我只是建议如果你仍然有问题,你可以在这个答案的评论中发表(如果它与这个特定的问题有关),或者问另一个问题。干杯