问题标签 [doctrine-orm]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
13 回答
108857 浏览

php - Doctrine2:使用参考表中的额外列处理多对多的最佳方法

我想知道在 Doctrine2 中处理多对多关系的最好、最干净和最简单的方法是什么。

假设我们有一张像Metallica的Master of Puppets这样的专辑,里面有几首曲目。但请注意,一首曲目可能会出现在一张专辑中,就像Metallica 的Battery一样 - 三张专辑都包含这首曲目。

所以我需要的是专辑和曲目之间的多对多关系,使用带有一些附加列的第三个表(如指定专辑中曲目的位置)。实际上,正如 Doctrine 的文档所建议的那样,我必须使用双重一对多关系来实现该功能。

样本数据:

现在我可以显示与它们相关的专辑和曲目列表:

结果是我所期待的,即:一张专辑列表,其中的曲目按适当的顺序排列,推广的专辑被标记为推广。

那么有什么问题呢?

此代码演示了问题所在:

Album::getTracklist()返回一个对象数组AlbumTrackReference而不是Track对象。我无法创建代理方法,如果两者兼而有之怎么办,Album并且Track会有getTitle()方法?我可以在方法中做一些额外的处理,Album::getTracklist()但最简单的方法是什么?我是被迫写这样的东西吗?

编辑

@beberlei 建议使用代理方法:

这将是一个好主意,但我正在使用双方的“参考对象”:$album->getTracklist()[12]->getTitle()$track->getAlbums()[1]->getTitle(),所以getTitle()方法应该根据调用的上下文返回不同的数据。

我将不得不做类似的事情:

这不是一个非常干净的方式。

0 投票
2 回答
3874 浏览

php - Doctrine 2 - “Getting Started XML-Edition”的问题 - 生成数据库模式

以前从未接触过 Doctrine(1 或 2),我正在关注Doctrine 2 的本教程

我正处于使用命令行生成数据库模式的地步。这是 cli-config.php 文件,根据教程:

但是,当我运行它时,我得到一个错误:

因为 cli-config.php 文件引用的那个类不存在。我也尝试过清空 cli-config.php 文件,这当然也不起作用 - 说“未定义帮助程序“em”。”

我使用的是 2.0.0BETA3 版本。我知道这是一个测试版,所以他们可能已经改变了一些文件,但我在任何地方都找不到那个类。

关于如何让它工作的任何想法?

0 投票
3 回答
692 浏览

php - require_once 缺少学说 zend 框架

我正在将教义与 Zend 框架集成。我遇到了 cli 抛出的错误。Zend_Application_Bootstrap_Bootstrap 似乎没有 Zend_Application_Bootstrap_BootstrapAbstract 的 require_once。有人打过这个吗?

我的 cli-config.php

0 投票
2 回答
1010 浏览

php - Zend 和静态类属性

我试图在定义静态类属性时为其赋值:

当我尝试执行此代码时,我收到此错误:

如果我只是为其分配一个简单的字符串值:

一切都很好。我在做 PHP 无法处理的事情吗?如果是这样,如何解决这个问题?

0 投票
2 回答
536 浏览

zend-framework - 学说2 Zend框架命名空间控制器

我正在尝试将教义2 沙箱与默认的 Zend 框架应用程序集成。当我尝试在控制器中使用命名空间时,出现“无效的控制器类(“IndexController”)”错误

这有效:

这不会(但应该?):

0 投票
2 回答
3900 浏览

php - Doctrine 2 迁移如何使用 sqlite db 更改表?

我在更改学说 2 迁移中的表时遇到了一些问题。以下代码总是抛出错误:Operation 'Doctrine\DBAL\Platforms\AbstractPlatform::getAlterTableSQL' is not supported by platform

这很奇怪,因为 sqlite 支持 alter table。

0 投票
2 回答
3051 浏览

php - How to drop a foreign key in doctrine 2 migrations

I want to drop a foreign key in a doctrine 2 migration. But there is no dropForeignKeyConstraint()

Does anybody know how to drop it?

0 投票
1 回答
3095 浏览

php - 如何处理 Doctrine 2 验证的异常

我是 Doctrine 2 的新手(实际上是 PHP 中的例外),但我正在尝试在 Doctrine 2 上(在 CodeIgniter 之上)提出一个强大的验证引擎,遵循此页面

现在我想知道我将在哪里定义 ValidateException 类,以及如何“尝试”对我的实体(来自控制器、库等)进行保存(持久化?)。

在这样做之后(例如,在“身份验证”库中),我想要一些东西:

我可以简单地返回该持久性是成功的(即,通过验证并保存),还是不成功(即,验证失败)。

0 投票
1 回答
1506 浏览

php - Doctrine 2 Classloader 奇怪的行为 - 错误的类路径

我在将 Classloader 添加到 Doctrine 2 项目时遇到了一些问题。我有这样的简单目录结构:

  • 配置(引导文件)
  • html(带有模板/图像/js等的docroot)
  • php
  • 实体(学说 2 实体)
  • 响应(一些传输对象)
  • 服务(处理 api 和业务逻辑 - 像 java 中的会话 bean)

每个 php 子目录都属于自己的命名空间(与目录名称相同)。
我想使用前面提到的类加载器来加载这三个不同的包,所以我的引导程序看起来像这样:

粗体 DIR 实际上是__ DIR __php 常量。

现在,我在我的服务包中指的是实体,这就是问题开始的地方,由于某种原因,由于找不到文件问题,我得到了错误,例如:

无法打开所需的“/var/www/projects/PlatformManagement/config/../php/Services/Entities/User.php”(include_path='.:/usr/share/pear:/usr/share/php') /usr/share/pear/Doctrine/Common/ClassLoader.php 在第148行

不知何故,路径中有额外的“服务”,显然它不是有效的路径。我有点纳闷,为什么会有那个额外的目录?我三次检查了所有命名空间、调用,它们都正常。

我需要另一双眼睛才能看到,我假设我在这里遗漏了一些明显的东西,但无法发现它:|

哦,如果有帮助的话,这是 Fedora 上最新的 Doctrine 2 Beta (4) 和 php 5.3.3。

谢谢,格雷格

0 投票
3 回答
3258 浏览

php - 学说2删除ManyToMany关系

我有一个具有以下类成员和映射的组实体:

添加一个孩子很简单:

删除一个孩子:

我将如何删除一个孩子?