Doctrine Project是一个开源库和工具的集合,用于处理用PHP编写的数据库抽象和对象关系映射。
如何在 Doctrine 数据库抽象层 (DBAL) 中输入 NULL 或字符串
我使用的是 Symfony 7.4.1 ... 使用 Doctrine\DBAL\Connection; 使用 Doctrine\DBAL\ParameterType; ... 公共函数 setImages(int $post_id, ?string $images_str): void { $this->连接...
我在一个项目中使用 Doctrine,我必须找到一个值。如果这样的值不存在或者有多个值,则必须启动另一个进程。 我想我应该使用
执行查询时发生异常:SQLSTATE[42S01]: 基表或视图已存在: 1050 表 'user' 已存在
我已经在 symfony 中生成了此迁移,以将createdAt和UpdatedAt字段添加到表中 我已经在 symfony 中生成了此迁移,以将createdAt和UpdatedAt字段添加到表中 <?php declare(strict_types=1); namespace DoctrineMigrations; use Doctrine\DBAL\Schema\Schema; use Doctrine\Migrations\AbstractMigration; /** * Auto-generated Migration: Please modify to your needs! */ final class Version20241105173344 extends AbstractMigration { public function getDescription(): string { return ''; } public function up(Schema $schema): void { // this up() migration is auto-generated, please modify it to your needs $this->addSql('ALTER TABLE user ADD created_at DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL COMMENT \'(DC2Type:datetime_immutable)\', ADD updated_at DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\''); } public function down(Schema $schema): void { // this down() migration is auto-generated, please modify it to your needs $this->addSql('ALTER TABLE `user` DROP created_at, DROP updated_at'); } } 但是当我尝试执行迁移时 An exception occurred while executing a query: SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'user' already exists 迁移并没有尝试再次创建表,我不知道迁移出了什么问题 Doctrine 迁移系统将所有已执行的迁移保存在单独的表中,以“记住”哪些迁移已经执行。一旦执行迁移过程,它会在代码中找到第一个未执行的迁移,并从这一个开始执行所有未执行的迁移。 现在,回到你的错误。它清楚地显示 Table 'user' already exists,这意味着它正在尝试创建表格。如果由于某种原因您的数据库中已存在此表,但负责此更改的迁移未标记为已执行,并且当您开始迁移过程时,它会尝试执行“创建表用户”查询,则可能会发生这种情况,这很可能位于代码中旧迁移中的某个位置。它与您在问题中给我们的迁移无关。
更改 symfony 上的嵌入字段名称以避免无法识别的字段:App\Domain\Entity\User::$email 问题
我有这个实体 我有这个实体 <?php namespace App\Domain\Entity; use App\Domain\ValueObject\Email; use App\Domain\ValueObject\Name; use App\Domain\ValueObject\Password; use App\Domain\ValueObject\Surname; use Ramsey\Uuid\UuidInterface; use Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface; use Symfony\Component\Security\Core\User\UserInterface; class User implements UserInterface, PasswordAuthenticatedUserInterface { public function __construct( private UuidInterface $id, private Name $name, private Surname $surname, private Email $email, private Password $password, private array $roles = [] ) {} public function getId(): UuidInterface { return $this->id; } public function setId(UuidInterface $id): void { $this->$id = $id; } public function getName(): Name { return $this->name; } public function setName(Name $name): void { $this->name = $name; } public function getSurname(): Surname { return $this->surname; } public function setSurname(Surname $surname): void { $this->surname = $surname; } public function getEmail(): string { return $this->email->value(); } public function setEmail(String $email): void { $this->$email = new Email($email); } public function getVOEmail(): Email { return $this->email; } public function setVOEmail(Email $email): void { $this->$email = $email; } public function getVOPassword(): Password { return $this->password; } public function setVOPassword(Password $password): void { $this->password = $password; } public function getPassword(): ?string { return $this->password->value(); } public function setPassword(string $password): static { $this->password = $password; return $this; } /** * Get the roles granted to the user. */ public function getRoles(): array { // Garantizar que cada usuario tenga al menos el rol ROLE_USER if (empty($this->roles)) { $this->roles[] = 'ROLE_USER'; } return array_unique($this->roles); } /** * Set the roles for the user. */ public function setRoles(array $roles): static { $this->roles = $roles; return $this; } /** * Get the user identifier (e.g., email). */ public function getUserIdentifier(): string { return $this->email->value(); // O cualquier otro identificador único } /** * Erase any sensitive information. */ public function eraseCredentials(): void { // Si hay información sensible que deseas eliminar, hazlo aquí. // Por ejemplo, si usaste una contraseña sin encriptar durante la autenticación: // $this->plainPassword = null; // O cualquier otro campo temporal. } } 这样映射 <?xml version="1.0" encoding="UTF-8"?> <doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping https://raw.githubusercontent.com/doctrine/doctrine2/main/doctrine-mapping.xsd"> <!-- Definición de la entidad --> <entity name="App\Domain\Entity\User" table="`user`" repository-class="App\Infrastructure\Service\UserRepository"> <!-- Identificador (ID) --> <id name="id" type="uuid" column="id"> <generator strategy="NONE"/> <!-- Usamos un UUID generado manualmente --> </id> <!-- Definición de los campos --> <embedded name="email" class="App\Domain\ValueObject\Email" use-column-prefix="false"/> <embedded name="name" class="App\Domain\ValueObject\Name" use-column-prefix="false"/> <embedded name="surname" class="App\Domain\ValueObject\Surname" use-column-prefix="false"/> <embedded name="password" class="App\Domain\ValueObject\Password" use-column-prefix="false"/> <!-- Definición de la columna JSON para los roles --> <field name="roles" type="json" column="roles"/> </entity> </doctrine-mapping> 和可嵌入映射 <?xml version="1.0" encoding="UTF-8"?> <doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping https://raw.githubusercontent.com/doctrine/doctrine2/main/doctrine-mapping.xsd"> <!-- Definición del objeto embebido --> <embeddable name="App\Domain\ValueObject\Email"> <!-- Campo de la clase Email --> <field name="value" column="email" type="string" length="255" nullable="false"/> </embeddable> </doctrine-mapping> 电子邮件是一个值对象(与属性上的其余部分一样),我使用了属性的嵌入式类,我的工作是将用户存储在数据库中,但不是使用LexikJWTAuthenticationBundle登录,问题是当我尝试登录用户我收到此错误Unrecognized field: App\Domain\Entity\User::$email 调试发现这段代码 $this->class->fieldMappings[$field] 不会将字段名称重新调整为电子邮件、姓名、姓氏...它会在类中返回 email.value 、name.value...,因为电子邮件值包含在名为 $value 的变量中 <?php namespace App\Domain\ValueObject; class Email { public function __construct(private string $value) {} public function value(): string { return $this->value; } } 我不知道如何在调用 name 时获取 name.value 而不是 $this->class->fieldMappings[$field],名称已在 xml 配置文件中设置 将用户名和电子邮件等数据保存为 VO 是非常非标准的方式。如果您放弃这个想法并重构您的实体以将此类数据保存为字符串(您始终可以创建专门的 getter 来设置和获取这些值作为 VO),您将从长远来看受益。 如果 LexikJWTAuthenticationBundle 仅限于使用 ORM 映射来获取这些属性,并且您无法覆盖此行为,那么不幸的是,我没有看到解决方案。作为最后的手段,您可以覆盖捆绑包本身中的这部分代码(如果可能的话,通过使用 symfony DI 覆盖服务),但我也不推荐这样做,因为它可能会导致更糟糕的情况和不可预测的情况未来(不提升级包后的问题)。 最后一件事,如果有办法以某种方式为 LexikJWTAuthenticationBundle 提供属性路径而不是映射字段,您可能可以创建一个单独的 getter (例如 getEmailValue、getNameValue),并使捆绑包使用 emailValue 和 nameValue 属性。但是,同样,这个捆绑包很可能无法开箱即用。
Doctrine 查询生成器使用 join 嵌套 orX 和 andX 条件
我有两个实体 User 和 CalendarEvent。我的用户附属于一家工厂,calendarEvent 可用于了解用户是否被“借用”到他所属工厂的另一家工厂...... 我的两个
Select * from tableName order by id desc limit 10 如何通过演示来执行类似上述的操作?
在 Symfony 中使用 Doctrine 时如何将 auto_generate_proxy_classes 设置为 AUTOGENERATE_EVAL?
我收到代理文件的常量 rename() 错误(此问题),我发现您可以调用 setAutoGenerateProxyClasses(Doctrine\ORM\Proxy\ProxyFactory::AUTOGENERATE_EVAL) 来防止...
想知道是否有一个易于将结构化文件转换为 Doctrine / Symfony 的 YAML 数据装置。 我没有看到 Doctrine 有任何接受 CSV 的实用程序。 我可能会开始写一些东西......
假设我有一个父实体: #[ORM\Entity(repositoryClass: EventRepository::class)] 事件实体类 { ... #[ORM\ManyToOne(targetEntity: EventStatusEntity::class)] #[ORM\JoinColumn...
我面临着一个非常烦人的问题。我有一个 Recipe 实体,其中包含一些具有多对多关系的成分(带有一个 Ingredient 实体)和一个用于映射的 RecipeIngredient 实体。 ...
在我使用 Doctrine ORM 2.7.0 的 Symfony 4 应用程序中,我得到了一个实体产品,它是外部包/系统(Akeneo 5)的一部分,我不能只是修改。由于我需要向其中添加属性(股票),所以我...
我在 Symfony 2.4 项目中有一个 Util 类,可以从书中获取 slug。 slug 不能重复。每个蛞蝓必须是唯一的。我有以下代码形成生成 slug 的类。我...
我想使用 NOT IN 从“页面”到“术语”进行左连接 实体 /** * @ORM\Entity(repositoryClass="AppBundle\Repository\PageRepository") * @ExclusionPolicy(&qu...
如何使用doctrine/postgresql [symfony]获取随机元素
我在 postgresql 上配置了一个 symfony/doctrine 项目,我想获得表中某个元素的随机结果。我怎样才能做到这一点?
我正在尝试将捆绑包中的固定装置添加到我的应用程序中的固定装置中。这些装置位于我的包中 lib/MyCompany/MyBundle/Fixtures 下的子目录中。 例子: // 我的公司/MyBundle/
我在我的存储库类中编写了自定义查询,它们返回数组,然后我对这些数组进行一些处理,然后显示到树枝。 所以请建议应用的最佳分页方法
尝试运行向下/回滚命令时出现 Doctrine 迁移类未找到错误
当我运行 bin/consoledoctrine:migrations:list 时,我看到迁移列出为: 应用程序\迁移\版本20210909072642 我正在尝试回滚迁移,并且尝试了几种不同的方法
我知道模型不应该是这样的,但我必须这样做。 我有 3 个带有列的实体: 类别 身份证号(@id) 类别ID 姓名 ... 产品 身份证号(@id) 类别ID ... 所有者 身份证号(@id) 名字...
当原始查询有 GROUP BY 时,我遇到了 Doctrine 寻呼机的问题。寻呼机将生成以下查询: SELECT COUNT(*) AS num_results FROM event e GROUP BY e.type 这是不正确的...
我正在使用 Symfony 7.1.3 和 Doctrine DBAL 4.1,并在我的doctrine.yaml 中配置了多个数据库连接。我的默认连接(npreports)工作正常,但是当我尝试在