Symfony5/Doctrine : 创建实体而不保存到数据库
Symfony5/Doctrine : Create an Entity without saving to a database
我有一个远程第三方 REST API。我正在尝试使用名为 Offer
的实体来表示其数据,但我不想将其存储在数据库中。
Offer 实体应该有一个存储库,我将在其中使用 Symfony\Component\HttpClient
来管理使用 GET
和 POST
到 API 的数据。
如果我尝试删除实体 class 中的 @ORM
注释,我会收到 No identifier/primary key specified for Entity "App\Entity\Offer". Every Entity must have an identifier/primary key.
或 Class "App\Entity\Offer" is not a valid entity or mapped super class.
错误。
换句话说,我不想在使用 php bin\console doctrine:migrations:migrate
后创建 'Offer' table
有没有办法使用 Doctrine 通过 API (而不是数据库) 持久化实体?
编辑:或者,如何在不使用 Doctrine 的情况下创建链接到存储库的实体?
Doctrine 是专门为数据库存储而构建的,所以我认为尝试将其用于存储在外部 API 中并不是一个聪明的主意。但是,如果您无论如何都想这样做,那么您可能必须实施一个使用 http 客户端的存储库。
总而言之,我建议您采用一种不同的方法,将 ORM 完全排除在外。
可是你的API后面没有数据库?或者您正在使用 ElasticSearch 或类似的解决方案?如果你有数据库,你应该保留 Doctrine :)
然而,如果你真的不想要它,你可以这样做:保留你的实体,删除所有 @ORM\*
注释,删除所有 use Doctrine\*
,并在你的存储库中删除 extends EntityRepository
(非常重要)。
您可以添加自己的抽象存储库 class 来扩展您的存储库,并使用一种名为 getEntity()
的方法:abstract protected function getEntity()
然后在您的存储库中:
protected function getEntity(): string
{
return YourEntity::class;
}
public function foo() {
$entityClass = $this->getEntity();
$entity = new $entityClass();
}
我有一个远程第三方 REST API。我正在尝试使用名为 Offer
的实体来表示其数据,但我不想将其存储在数据库中。
Offer 实体应该有一个存储库,我将在其中使用 Symfony\Component\HttpClient
来管理使用 GET
和 POST
到 API 的数据。
如果我尝试删除实体 class 中的 @ORM
注释,我会收到 No identifier/primary key specified for Entity "App\Entity\Offer". Every Entity must have an identifier/primary key.
或 Class "App\Entity\Offer" is not a valid entity or mapped super class.
错误。
换句话说,我不想在使用 php bin\console doctrine:migrations:migrate
有没有办法使用 Doctrine 通过 API (而不是数据库) 持久化实体?
编辑:或者,如何在不使用 Doctrine 的情况下创建链接到存储库的实体?
Doctrine 是专门为数据库存储而构建的,所以我认为尝试将其用于存储在外部 API 中并不是一个聪明的主意。但是,如果您无论如何都想这样做,那么您可能必须实施一个使用 http 客户端的存储库。
总而言之,我建议您采用一种不同的方法,将 ORM 完全排除在外。
可是你的API后面没有数据库?或者您正在使用 ElasticSearch 或类似的解决方案?如果你有数据库,你应该保留 Doctrine :)
然而,如果你真的不想要它,你可以这样做:保留你的实体,删除所有 @ORM\*
注释,删除所有 use Doctrine\*
,并在你的存储库中删除 extends EntityRepository
(非常重要)。
您可以添加自己的抽象存储库 class 来扩展您的存储库,并使用一种名为 getEntity()
的方法:abstract protected function getEntity()
然后在您的存储库中:
protected function getEntity(): string
{
return YourEntity::class;
}
public function foo() {
$entityClass = $this->getEntity();
$entity = new $entityClass();
}