Doctrine ORM是一个PHP ORM。虽然Doctrine 1.2使用Active Record模式,但Doctrine ORM 2及更高版本使用Data Mapper模式。 Doctrine项目是一个开源库和工具的集合,用于处理用PHP编写的数据库抽象和对象关系映射。
Doctrine 迁移:重复生成相同的 ALTER TABLE 语句
我最近将我的 Symfony 项目从 5.4 升级到 6.4.13。现在,我在 Symfony 项目中遇到了 Doctrine Migrations 的问题。当我运行doctrine:migrations:diff 命令时,它生成...
在我的 Symfony 应用程序中,我有一个使用 Doctrine 保存记录的函数: 公共函数 save(Car $car): void { $this->getEntityManager()->persist($car); $this->getEntityManager()-...
无法将 PHP 值 X 转换为 uuid 类型。需要以下类型之一:字符串。但是 X 实现了 \Stringable
当我调用Doctrine的flush函数来保存X实体时,出现转换错误。 无法将 X 类型的 PHP 值转换为 uuid 类型。需要以下类型之一:null、string、Symfony\
我需要根据字符串从数据库中获取 5 个不同的日期类型值。当我在 phpmyadmin 运行 SQL 查询时,结果是正确的: 从“集合”中选择不同的“日期”,其中“日期”类似于...
我正在尝试将 Symfony2 与 Azure 上的 Redis 服务器连接,但无法弄清楚在哪里放置主机名、端口和密钥以及其他详细信息(如果需要,但我不知道)。 作曲家.json “前...
通过非主键-id的referencedColumnName连接列
我是 Symfony Doctrine 的新手,需要一些有关连接实体的帮助。 通常列是通过主键 ID 连接的 /** * 用户 * * @ORM\Table(名称=“用户”) * @ORM\实体(
Symfony:使用 php bin/console make:entity 时出现“DisconnectedClassMetadataFactory”错误
我正在尝试使用以下命令在 Symfony 中创建一个实体: php bin/console make:实体 提供实体名称后,我遇到以下错误: 尝试加载类“
在 Doctrine Entity Listener 的 preUpdate 中保留其他实体
为了清楚起见,我继续这里开始的讨论。 在 Doctrine 实体监听器内部,在 preUpdate 方法中(我可以访问实体任何字段的旧值和新值)...
如何在 Symfony 编译器过程中自动加载 Doctrine 实体映射?
我正在尝试根据文件夹结构自动加载实体映射。我的加载器类返回一个像下面这个数组一样的地图。我的目标是找到所有功能并将其域文件夹映射到...
Doctrine2 挑战,我有 OneToMany,但没有 ManyToOne,
拥有一个消息系统,消息可以属于咨询,但不是必须的。不过,所有咨询确实都有 1 条或多条消息...... 我的实体是由 Doctrine 生成的
有人可以用简单的词语向我解释实体中的集合,尤其是ArrayCollections吗?这些是什么?何时以及如何使用它们? (也许提供一个简单的例子)。
INET_ATON 在where 语句doctrine2 querybuilder zend2
问题:我想在 Doctrine2 中使用 querybuilder 运行查询,例如: SELECT * FROM TABLE WHERE `column1` = 'x' and (`column2` = INET_ATON('1.1.1.1') OR `column3` like '%bla%'...) 我该怎么办...
查询 n = null 的 m:n 关系 - 返回 Lexer 错误
构建查询以选择没有对应 N 个实体的 M 个实体,会返回以下查询的错误: 返回 $this->getEntityManager() ->创建查询( ...
我有以下型号: 我有以下型号: <?php namespace App\Domain\Model\Meal; use App\Domain\Model\HasUuid; use App\Domain\Model\Timestampable; use App\Domain\Model\User\Child; use Doctrine\ORM\Mapping as ORM; use Ramsey\Uuid\Uuid; #[ORM\Entity] #[ORM\Table(name: 'meal_opt_out')] final class MealOptOut { use HasUuid; use Timestampable; #[ORM\ManyToOne(targetEntity: MealItemSchedule::class)] #[ORM\JoinColumn(name: 'meal_item_schedule_id', referencedColumnName: 'id', nullable: false, onDelete: 'CASCADE')] private MealItemSchedule $mealItemSchedule; #[ORM\ManyToOne(targetEntity: Child::class)] #[ORM\JoinColumn(name: 'child_id', referencedColumnName: 'id', nullable: false, onDelete: 'CASCADE')] private Child $child; public function __construct( MealItemSchedule $mealItemSchedule, Child $child ) { $this->id = Uuid::uuid4()->toString(); $this->mealItemSchedule = $mealItemSchedule; $this->child = $child; } // Getters and setters... } 具有Uuid特征: <?php namespace App\Domain\Model; use Doctrine\ORM\Mapping as ORM; trait HasUuid { #[ORM\Id] #[ORM\Column(name: 'id', type: 'string', unique: true)] protected string $id; public function getId(): string { return $this->id; } public function setId(string $id): void { $this->id = $id; } } 我使用的是六角形架构,所以我有一些接口,但最重要的文件是DoctrineMealOptOutRepository: <?php namespace App\Infrastructure\Repository\Meal; use App\Domain\Model\Meal\MealOptOut; use App\Domain\Repository\Meal\MealOptOutRepositoryInterface; use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; use Doctrine\Persistence\ManagerRegistry; final class DoctrineMealOptOutRepository extends ServiceEntityRepository implements MealOptOutRepositoryInterface { public function __construct( private ManagerRegistry $manager, ) { parent::__construct($manager, MealOptOut::class); } /* public function save(MealOptOut $mealOptOut): void { $this->getEntityManager()->persist($mealOptOut); $this->getEntityManager()->flush(); } */ public function save(MealOptOut $mealOptOut): void { $connection = $this->getEntityManager()->getConnection(); $sql = ' INSERT INTO meal_opt_out (id, meal_item_schedule_id, child_id, created_at, updated_at) VALUES (:id, :meal_item_schedule_id, :child_id, NOW(), NOW()) '; $params = [ 'id' => $mealOptOut->getId(), 'meal_item_schedule_id' => $mealOptOut->getMealItemSchedule()->getId(), 'child_id' => $mealOptOut->getChild()->getId(), ]; $connection->executeStatement($sql, $params); } } MealOptOutRepository接口: <?php namespace App\Domain\Repository\Meal; use App\Domain\Model\Meal\MealOptOut; interface MealOptOutRepositoryInterface { public function save(MealOptOut $mealOptOut): void; } MealOptOutService接口: <?php namespace App\Domain\Service\Meal; use App\Domain\Model\Meal\MealItemSchedule; use App\Domain\Model\Meal\MealOptOut; use App\Domain\Model\User\Child; interface MealOptOutServiceInterface { public function saveMealOptOut(MealOptOut $mealOptOut): ?MealOptOut; } MealOptOutService 实施: <?php namespace App\Domain\Service\Meal\Impl; use App\Domain\Model\Meal\MealItemSchedule; use App\Domain\Model\Meal\MealOptOut; use App\Domain\Model\User\Child; use App\Domain\Repository\Meal\MealOptOutRepositoryInterface; use App\Domain\Service\Meal\MealOptOutServiceInterface; use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; use Doctrine\Persistence\ManagerRegistry; use Ramsey\Uuid\Uuid; final class MealOptOutServiceImplementation extends ServiceEntityRepository implements MealOptOutServiceInterface { public function __construct( private MealOptOutRepositoryInterface $mealOptOutRepository, private ManagerRegistry $manager, ) { parent::__construct($manager, MealOptOut::class); } public function saveMealOptOut(MealOptOut $mealOptOut): ?MealOptOut { return $this->mealOptOutRepository->save($mealOptOut); } } 该服务的调用方式如下: $mealOptOut = new MealOptOut($this->selectedMealItemSchedule, $child); // $mealOptOut->setId(Uuid::uuid4()->toString()); $this->mealOptOutService->saveMealOptOut($mealOptOut); 问题是当我在DoctrineMealOptOutRepository中使用这个版本的save时 public function save(MealOptOut $mealOptOut): void { $this->getEntityManager()->persist($mealOptOut); $this->getEntityManager()->flush(); } 我收到以下错误: An exception occurred while executing a query: SQLSTATE[HY000]: General error: 1364 Field 'id' doesn't have a default value ... at Doctrine\DBAL\Connection->convertExceptionDuringQuery(object(Exception), 'INSERT INTO meal_opt_out (created_at, updated_at, meal_item_schedule_id, child_id) VALUES (?, ?, ?, ?)', array(null, null, 'f8ab33de-ab9d-11ef-bcf3-44da78cb937b', 'a440ab82-573d-4475-a9e3-b5bf839352ed'), array('datetime', 'datetime', 'string', 'string')) 您在日志中看到实体管理器由于某种原因没有插入 id 列。我 100% 确定 id 已设置。我对其他实体使用完全相同的架构和特征,并且它适用于它们。我尝试自动生成 uuid,但这也没有帮助。 我暂时通过手动执行 SQL 来修复它(确实有效,表明 ID 确实设置正确)。 我做错了什么? 您可能缺少GenerateValue行,如下所示: <?php namespace App\Domain\Model; use Doctrine\ORM\Mapping as ORM; trait HasUuid { #[ORM\Id] #[ORM\GeneratedValue(strategy: 'CUSTOM')] #[ORM\Column(type: 'uuid', unique: true)] #[ORM\CustomIdGenerator(class: UuidGenerator::class)] private ?UuidInterface $id = null;
我有以下型号: 我有以下型号: <?php namespace App\Domain\Model\Meal; use App\Domain\Model\HasUuid; use App\Domain\Model\Timestampable; use App\Domain\Model\User\Child; use Doctrine\ORM\Mapping as ORM; use Ramsey\Uuid\Uuid; #[ORM\Entity] #[ORM\Table(name: 'meal_opt_out')] final class MealOptOut { use HasUuid; use Timestampable; #[ORM\ManyToOne(targetEntity: MealItemSchedule::class)] #[ORM\JoinColumn(name: 'meal_item_schedule_id', referencedColumnName: 'id', nullable: false, onDelete: 'CASCADE')] private MealItemSchedule $mealItemSchedule; #[ORM\ManyToOne(targetEntity: Child::class)] #[ORM\JoinColumn(name: 'child_id', referencedColumnName: 'id', nullable: false, onDelete: 'CASCADE')] private Child $child; public function __construct( MealItemSchedule $mealItemSchedule, Child $child ) { $this->id = Uuid::uuid4()->toString(); $this->mealItemSchedule = $mealItemSchedule; $this->child = $child; } // Getters and setters... } 具有Uuid特征: <?php namespace App\Domain\Model; use Doctrine\ORM\Mapping as ORM; trait HasUuid { #[ORM\Id] #[ORM\Column(name: 'id', type: 'string', unique: true)] protected string $id; public function getId(): string { return $this->id; } public function setId(string $id): void { $this->id = $id; } } 我使用的是六角形架构,所以我有一些接口,但最重要的文件是DoctrineMealOptOutRepository: <?php namespace App\Infrastructure\Repository\Meal; use App\Domain\Model\Meal\MealOptOut; use App\Domain\Repository\Meal\MealOptOutRepositoryInterface; use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; use Doctrine\Persistence\ManagerRegistry; final class DoctrineMealOptOutRepository extends ServiceEntityRepository implements MealOptOutRepositoryInterface { public function __construct( private ManagerRegistry $manager, ) { parent::__construct($manager, MealOptOut::class); } /* public function save(MealOptOut $mealOptOut): void { $this->getEntityManager()->persist($mealOptOut); $this->getEntityManager()->flush(); } */ public function save(MealOptOut $mealOptOut): void { $connection = $this->getEntityManager()->getConnection(); $sql = ' INSERT INTO meal_opt_out (id, meal_item_schedule_id, child_id, created_at, updated_at) VALUES (:id, :meal_item_schedule_id, :child_id, NOW(), NOW()) '; $params = [ 'id' => $mealOptOut->getId(), 'meal_item_schedule_id' => $mealOptOut->getMealItemSchedule()->getId(), 'child_id' => $mealOptOut->getChild()->getId(), ]; $connection->executeStatement($sql, $params); } } MealOptOutRepository接口: <?php namespace App\Domain\Repository\Meal; use App\Domain\Model\Meal\MealOptOut; interface MealOptOutRepositoryInterface { public function save(MealOptOut $mealOptOut): void; } MealOptOutService接口: <?php namespace App\Domain\Service\Meal; use App\Domain\Model\Meal\MealItemSchedule; use App\Domain\Model\Meal\MealOptOut; use App\Domain\Model\User\Child; interface MealOptOutServiceInterface { public function saveMealOptOut(MealOptOut $mealOptOut): ?MealOptOut; } MealOptOutService 实施: <?php namespace App\Domain\Service\Meal\Impl; use App\Domain\Model\Meal\MealItemSchedule; use App\Domain\Model\Meal\MealOptOut; use App\Domain\Model\User\Child; use App\Domain\Repository\Meal\MealOptOutRepositoryInterface; use App\Domain\Service\Meal\MealOptOutServiceInterface; use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; use Doctrine\Persistence\ManagerRegistry; use Ramsey\Uuid\Uuid; final class MealOptOutServiceImplementation extends ServiceEntityRepository implements MealOptOutServiceInterface { public function __construct( private MealOptOutRepositoryInterface $mealOptOutRepository, private ManagerRegistry $manager, ) { parent::__construct($manager, MealOptOut::class); } public function saveMealOptOut(MealOptOut $mealOptOut): ?MealOptOut { return $this->mealOptOutRepository->save($mealOptOut); } } 该服务的调用方式如下: $mealOptOut = new MealOptOut($this->selectedMealItemSchedule, $child); // $mealOptOut->setId(Uuid::uuid4()->toString()); $this->mealOptOutService->saveMealOptOut($mealOptOut); 问题是当我在DoctrineMealOptOutRepository中使用这个版本的save时 public function save(MealOptOut $mealOptOut): void { $this->getEntityManager()->persist($mealOptOut); $this->getEntityManager()->flush(); } 我收到以下错误: An exception occurred while executing a query: SQLSTATE[HY000]: General error: 1364 Field 'id' doesn't have a default value ... at Doctrine\DBAL\Connection->convertExceptionDuringQuery(object(Exception), 'INSERT INTO meal_opt_out (created_at, updated_at, meal_item_schedule_id, child_id) VALUES (?, ?, ?, ?)', array(null, null, 'f8ab33de-ab9d-11ef-bcf3-44da78cb937b', 'a440ab82-573d-4475-a9e3-b5bf839352ed'), array('datetime', 'datetime', 'string', 'string')) 您在日志中看到实体管理器由于某种原因没有插入 id 列。我 100% 确定 id 已设置。我对其他实体使用完全相同的架构和特征,并且它适用于它们。我尝试自动生成 uuid,但这也没有帮助。 我暂时通过手动执行 SQL 来修复它(确实有效,表明 ID 确实设置正确)。 我做错了什么? 您可能缺少GenerateValue行,如下所示: <?php namespace App\Domain\Model; use Doctrine\ORM\Mapping as ORM; trait HasUuid { #[ORM\Id] #[ORM\GeneratedValue(strategy: 'CUSTOM')] #[ORM\Column(type: 'uuid', unique: true)] #[ORM\CustomIdGenerator(class: UuidGenerator::class)] private ?UuidInterface $id = null;
v10 更新失败,MYSQLI_SERVER_PUBLIC_KEY
通过composer更新正在运行的typo3 v10(从v10.x到10.y)后,我得到一个白色站点,当我切换到安装工具(我可以看到它并在那里登录)时,我得到以下内容信息: 致命错误...
Doctrine2.1:通过DiscriminatorColumn查找导致“未知字段”异常
我试图寻找这个错误,但事实上我没有找到任何东西,这让我相信我在做一些愚蠢的事情。我将在下面包含相关代码,但基本上我正在使用 mult...
使用原则 2,是否可以: 从生成的代理类中排除属性? 完全禁用延迟加载/代理生成? 我在序列化我的实体时遇到问题(使用
创建像 IF MySQL 函数一样的自定义 DQL,但它不起作用 - [Symfony 2]
我打算将 IfFunction 添加到 DQL 但它不起作用: //我的DQL类 我打算将 IfFunction 添加到 DQL 但它不起作用: //My DQL Class <?php namespace Application\HappyBundle\DQL; use Doctrine\ORM\Query\AST\Functions\FunctionNode; use Doctrine\ORM\Query\SqlWalker; use Doctrine\ORM\Query\Parser; use Doctrine\ORM\Query\Lexer; /** * IFFunction ::= "IF" "( "ArithmeticPrimary" , "ArithmeticPrimary" , "ArithmeticPrimary" )" */ class IFFunction extends FunctionNode { // (1) public $firstNumericExpression = null; public $secondNumericExpression = null; public $thirdNumericExpression = null; public function parse(\Doctrine\ORM\Query\Parser $parser) { $parser->match(Lexer::T_IDENTIFIER); // (2) $parser->match(Lexer::T_OPEN_PARENTHESIS); // (3) $this->firstNumericExpression = $parser->ArithmeticPrimary(); // (4) $parser->match(Lexer::T_COMMA); // (5) $this->secondNumericExpression = $parser->ArithmeticPrimary(); // (6) $parser->match(Lexer::T_COMMA); // (5) //$parser->match(Lexer::T_CLOSE_PARENTHESIS); // (3) $this->thirdNumericExpression = $parser->ArithmeticPrimary(); // (6) $parser->match(Lexer::T_CLOSE_PARENTHESIS); // (3) } public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker) { return 'IF(' . $this->firstNumericExpression->dispatch($sqlWalker) . ', ' . $this->secondNumericExpression->dispatch($sqlWalker) . ', ' . $this->thirdNumericExpression->dispatch($sqlWalker) . ')'; } } //config.yml 中的声明 dql: datetime_functions: timediff: Application\HappyBundle\DQL\TimeDiff addtime: Application\HappyBundle\DQL\AddTime numeric_functions: IF: Application\HappyBundle\DQL\IFFunction 添加 DQL 函数可以工作,但是当我打算这样做时: SELECT IF(1<2,'oui','non'); 字符'<' If i put the If function like this 有错误 SELECT IF('1<2','oui','non'); 它可以工作,但不能评估第一个条件:( 如果有人有想法...... 谢谢你的帮助。 我找到了解决方案,问题出在解析器上,它必须包含像这样的ConditionalExpression来评估: class IfFunction extends FunctionNode { private $expr = array(); public function parse(\Doctrine\ORM\Query\Parser $parser) { $parser->match(Lexer::T_IDENTIFIER); $parser->match(Lexer::T_OPEN_PARENTHESIS); $this->expr[] = $parser->ConditionalExpression(); for ($i = 0; $i < 2; $i++) { $parser->match(Lexer::T_COMMA); $this->expr[] = $parser->ArithmeticExpression(); } $parser->match(Lexer::T_CLOSE_PARENTHESIS); } public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker) { return sprintf('IF(%s, %s, %s)', $sqlWalker->walkConditionalExpression($this->expr[0]), $sqlWalker->walkArithmeticPrimary($this->expr[1]), $sqlWalker->walkArithmeticPrimary($this->expr[2])); } }
如何在 Doctrine 数据库抽象层 (DBAL) 中输入 NULL 或字符串
我使用的是 Symfony 7.4.1 ... 使用 Doctrine\DBAL\Connection; 使用 Doctrine\DBAL\ParameterType; ... 公共函数 setImages(int $post_id, ?string $images_str): void { $this->连接...