Doctrine ORM是一个PHP ORM。虽然Doctrine 1.2使用Active Record模式,但Doctrine ORM 2及更高版本使用Data Mapper模式。 Doctrine项目是一个开源库和工具的集合,用于处理用PHP编写的数据库抽象和对象关系映射。
我有一个 Symfony3 CRM,它实现了一个表单来创建发票。在此表格中列出了不同的成本,例如劳动力、服务和材料。我已经对其进行了编码,因此它是多维的......
订阅者在 API Platform 3.2 / Symfony6.4 中不会被调用
当使用 POST api 调用创建用户时,我让订阅者对密码进行哈希处理: 只读类PasswordHashSubscriber 实现EventSubscriberInterface { 公共函数 __construct(私有
我正在继续阅读 Doctrine 的入门指南,但由于“在第 6 行 /var/www/test/product-create.php 中未找到类‘Product’”而陷入困境: 我正在继续阅读 Doctrine 的入门指南,但由于“在第 6 行 /var/www/test/product-create.php 中未找到类‘Product’”而陷入困境: <?php require_once 'bootstrap.php'; $newProductName = $argv[1]; >>>>> $product = new Product(); $product->setName($newProductName); $entityManager->persist($product); $entityManager->flush(); echo sprintf('Created Product with ID %d' . PHP_EOL, $product->getId()); 正如指南中所写,我的项目中的“./src”目录下有 Product 类。 请帮助我,因为我想在没有 Symfony 的情况下开始使用 Doctrine,但我无法再继续了。 这是我的 bootstrap.php: <?php use Doctrine\ORM\Tools\Setup; use Doctrine\ORM\EntityManager; use Symfony\Component\Yaml\Parser; require 'vendor/autoload.php'; $yaml = new Parser(); $parameters = $yaml->parse(file_get_contents(__DIR__ . '/parameters.yml')); $parameters = $parameters['parameters']; $config = Setup::createAnnotationMetadataConfiguration(array(__DIR__ . '/src'), $parameters['debug']); $conn = array ( 'host' => $parameters['database_host'], 'port' => $parameters['database_port'], 'driver' => $parameters['database_driver'], 'user' => $parameters['database_user'], 'password' => $parameters['database_password'], 'dbname' => $parameters['database_name'] ); $entityManager = EntityManager::create($conn, $config); 这是我的 Product.php: <?php /** * @Entity * @Table (name="products") **/ class Product { /** * @Id * @Column(type="integer") @GeneratedValue **/ protected $id; /** * @Column(type="string") **/ protected $name; public function getId() { return $this->id; } public function getName() { return $this->name; } public function setName($name) { $this->name = $name; } } 提前谢谢大家! 我现在刚刚遇到你的问题,希望你找到答案,但为了帮助其他人,你需要确保在你的composer.json中包含以下内容 "autoload": { "psr-0": {"": "src/"} } 或者像@Сергей Студеникин建议的那样手动包含它 我不明白你在哪里包含产品类别。您需要在文件顶部写入 require_once 'patch_to_your_class/Product.php'; 或者使用类自动加载器。 我遇到了同样的问题,并通过正确配置我的 composer.json 文件中的自动加载部分来解决它。以下是我遵循的步骤: 1.基本自动加载配置: 在您的 composer.json 文件中包含以下代码: "autoload": { "psr-4": { "": "src/" } } 此配置告诉 Composer 从 src/ 目录自动加载类。 2.使用命名空间: 如果您的 product-create.php 文件使用 App\Entity 命名空间,您还需要将其包含在 composer.json 文件中: "autoload": { "psr-4": { "App\\Entity\\": "src/" } } 此配置将 App\Entity 命名空间映射到 src/ 目录。 3.自定义目录路径: 如果您的实体类位于不同的目录中,例如,src/entity/,请相应地更新路径: "autoload": { "psr-4": { "App\\Entity\\": "src/entity/" } } 此配置将 App\Entity 命名空间映射到 src/entity/ 目录。 4.重新生成自动加载文件: 对 composer.json 文件进行更改后,您需要通过运行以下 CLI 命令重新生成自动加载文件: composer dump-autoload 此命令更新 Composer 自动加载文件以反映新的自动加载配置。 因此,您不需要为添加的每个实体类都包含 require_once。
我对教义 2 有疑问。 我有以下数据库表: 因此,Doctrine 生成从站点的桌面设置检索数据的实体,但我需要从 desk_settings 检索所有设置...
从 Doctrine UnitOfWork 获取预定的额外更新
我有一个 Doctrine 事件监听器来监听 onFlush 事件。我使用它在保存时更新实体上的电子标签。 我需要访问计划删除的实体,以便我可以访问
Doctrine ORM 无法从 MySQL DB 中删除实体
我正在尝试清除实体集合。这是我的关系方案: 游戏 <-> GameQuest[] 玩家 <-> PlayerGameQuestLink[] PlayerGameQuestLink 实体有一些关于何时
使用 Doctrine\DBAL\Exception 捕获数据库错误
我想捕获来自插入语句或任何其他语句的任何错误(即:外键错误)。如何使用 Doctrine\DBAL\Exception 来实现这一点? 当我插入时我有这个: $db->
有人可以帮助我从具有不同列的两个表中获取所有数据吗?现在可以工作了,但我想按 DESC 字段“创建”顺序对所有帖子进行排序。 现在我按 id 排序,然后按“
Symfony:在 Doctrine 实体方法中使用返回类型提示的表单问题
我今天异常勤奋,决定返回类型提示我所有的 symfony 实体方法。所以: 我今天异常勤奋,决定返回类型提示我所有的 symfony 实体方法。所以: <?php Class User { private string $username; public method getUsername(): string {} } 一切都很好,直到我制作了一个表单来创建新用户: $user = new User(); $this->createForm(SignupType::class, $user); 当显示表单时,Symfony 会自动获取 User $user 这个新实例的属性。但由于它是一个新的实例化,它的 username 属性当然仍然是 null,这是一个不正确的返回类型,因为它需要是 string。 我应该: Symfony 实体中没有返回类型提示(meh); set $username = ''(但这有点违背了不允许空白的目的,我可以看到各种错误的演变);或 取消映射 symfony 表单上的字段 其他可能的解决方案... 如果实体属性不能是 null(并且您使用 PHP 7.1+),那么应用 可空返回类型声明听起来更像是一种肮脏而快速的解决方法,以维护实体和表单之间的直接数据绑定(使用 Symfony 表单组件)。 更好的全局方法(在我看来)是使用 DTO(数据传输对象)将表单数据绑定与 Doctrine 实体解耦,这是一个简单的 POPO(普通旧 PHP 对象)来包含您的形成数据。 使用 DTO 将允许您在 Doctrine 实体中维护严格的类型提示(不会丢失数据一致性),并将表单数据绑定(还有数据验证)与实体解耦。 DTO 允许重复使用并具有许多其他优点。 有关将 DTO 与 Symfony Forms 一起使用的一些有用参考: DEAD LINK 避免表单中的实体(作者:Iltar van der Berg) DEAD LINK 重新思考表单开发(作者 Iltar van der Berg) Symfony Forms 101(由 Form 组件的创建者 Bernhard Schussek) 不要在 Symfony 表单中使用实体。请改用自定义数据对象 实体应始终有效 如果您使用的是 PHP 7.0,它不支持可为 null 的返回类型声明,则第一个选项将是正确的(非 hacky)选择。如果您使用 PHP 7.1+,您可以定义一个 可空返回类型声明。 <?php class User { public function getUsername(): ?string {} }
`更换电脑后出现“类的 ArrayAccess 对象中的键“0”不存在”错误
我更换了电脑并尝试将我的项目导入到新电脑上。 我使用 Symfony(旧电脑上使用 6 个,新电脑上使用 7 个)。在导入所有数据之前,我使用 Doctrine 在本地重新创建数据库...
Symfony 从 String 类声明中获取 className 对象
我有这段代码,它返回第二行中声明的 className 的列名称: 公共函数 listColumns(EntityManagerInterface $em ) { $class = $em->getClassMetadata(Assure::cla...
如何在 postRemove 事件期间获取实体的对象 id?
我有这样的事情: 公共函数 postRemove(LifecycleEventArgs $args) { $entity = $args->getObject(); $实体->getId(); } $entity 拥有所选的所有属性
Doctrine(2.12) 使用 columnDefinition 不断为属性生成相同的迁移
我创建了一个 apiplatform 3.0、symfony 6.1 应用程序。 它有一个带有mysql 8.0的docker环境。 使用原则 2.11 中的新功能,我创建了 2 个属性: 特征 特征名称 { #[ORM\列(插入...
我正在使用 Symfony 6 和 API 平台,在使用计算连接表的列对我的实体进行排序时遇到了一些困难。 这是表格 公司 +----+------------+--------------+---------...
我需要获取所有数据库表字段名称。我已经尝试使用 ClassMetadata 获取该信息,不幸的是 getColumnNames() 不返回关系字段名称。和方法 getAssociationName...
任何人都可以解释以下学说模式验证错误消息吗: 这是多对多关系中每个实体的 yaml ORM 定义,根据第 5 节内联创建....
您好,我有一个有效的 DQL(我从一开始就得到了所有事件): DoctrineHelper::getEntityManager()->createQueryBuilder() ->select("u.姓氏, count(u.姓氏)为总数") -...
我有以下代码: 命名空间 Acme\StoreBundle\Entity; 使用 Doctrine\ORM\Mapping 作为 ORM; /** * Acme\StoreBundle\Entity\User * * @ORM\Table(名称=“用户”) * @ORM\Entity() */ 类用户...
Doctrine 事件:如何跟踪 ManyToMany 集合的添加/删除?
我有一个应用程序实体,它与 SortList 实体具有多对多关系。拥有方是应用程序。有一个简单的联接表可以创建此关系的映射。 ...
我使用的是Doctrine,它同时提供ORM(对象关系映射)和DBAL(数据库抽象层)。 他们之间有什么区别? 人们应该如何决定何时使用哪一个?