Symfony5/Doctrine : 创建实体而不保存到数据库

Symfony5/Doctrine : Create an Entity without saving to a database

我有一个远程第三方 REST API。我正在尝试使用名为 Offer 的实体来表示其数据,但我不想将其存储在数据库中。

Offer 实体应该有一个存储库,我将在其中使用 Symfony\Component\HttpClient 来管理使用 GETPOST 到 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();
}