在 Doctrine 中向当前表添加虚拟列?

2023-12-25

我正在使用 Doctrine 1.2 和 Symfony 1.4。假设我有一个用户模型,其中有一个配置文件。这些定义为:

User:

  • id
  • username
  • password
  • 创建时间
  • 更新时间

Profile:

  • id
  • user_id
  • address
  • city
  • 邮政编码

我通常会得到这样的数据:

$query = Doctrine_Query::create()
    ->select('u.id, u.username, p.first_name, p.last_name')
    ->from('User u')
    ->leftJoin('Profile p')
    ->where('u.username = ?', $username);
$result = $query->fetchOne(array(), Doctrine_Core::HYDRATE_ARRAY);
print_r($result);

这将输出如下内容:

Array (
    "User" => Array (
        "id" => 1,
        "username" => "jschmoe"
    ),
    "Profile" => Array (
        "first_name" => "Joseph",
        "last_name" => "Schmoe"
    )
)

但是,我希望用户包含“虚拟”列(不确定这是否是正确的术语),以便配置文件中的字段实际上看起来像是用户的一部分。换句话说,我会like查看 print_r 语句看起来更像:

Array (
    "User" => Array (
        "id" => 1,
        "username" => "jschmoe",
        "first_name" => "Joseph",
        "last_name" => "Schmoe"
    )
)

有没有办法通过我的 schema.yml 文件或通过我的 Doctrine_Query 对象来做到这一点?


做你想做的事情的方法是使用定制水化器 http://www.doctrine-project.org/projects/orm/1.2/docs/manual/data-hydrators/hu#writing-hydration-method.

class Doctrine_Hydrator_MyHydrator extends Doctrine_Hydrator_ArrayHierarchyDriver
{
    public function hydrateResultSet($stmt)
    {
        $results = parent::hydrateResultSet($stmt);
        $array = array();

        $array[] = array('User' => array(
            'id'         => $results['User']['id'],
            'username'   => $results['User']['username'],
            'first_name' => $results['Profile']['first_name'],
            'last_name'  => $results['Profile']['last_name'],
        ));

        return $array();
    }
}

然后向连接管理器注册您的水化器:

$manager->registerHydrator('my_hydrator', 'Doctrine_Hydrator_MyHydrator');

然后你像这样补充你的查询:

$query = Doctrine_Query::create()
    ->select('u.id, u.username, p.first_name, p.last_name')
    ->from('User u')
    ->leftJoin('Profile p')
    ->where('u.username = ?', $username);

 $result = $query->fetchOne(array(), 'my_hydrator');
 print_r($result);

/* outputs */
Array (
    "User" => Array (
        "id" => 1,
        "username" => "jschmoe",
        "first_name" => "Joseph",
        "last_name" => "Schmoe"
    )
)

您可能需要稍微微调水化器逻辑才能获得您想要的精确数组结构。但这是做你想做的事情的可接受的方式。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Doctrine 中向当前表添加虚拟列? 的相关文章

随机推荐

  • 解析 HTML:Python 中的 lxml 错误

    我正在编写一个简单的脚本来从中获取大灰色表here http www afi com 100years movies10 aspx 我的代码如下 import urllib2 from lxml import etree html urll
  • Jquery,使用 json 自动完成,id 与显示值

    我有一个复杂的自动完成问题 这是我正在开发的网站的消息系统 我希望它能够在您输入用户名的地方工作 它会返回用户的图像 姓名和 ID 的缩略图 然后 当您选择它时 我希望它显示用户名 但当它发回时 我希望它发回他们的 ID 因为用户名不是唯一
  • PHP文件加密方法。存在简单的东西吗?

    似乎没有任何令人愉快的方法来加密 php 中的文件 php 的内置方法 mcrypt 不太可移植 因为大多数服务器不支持它们 命令行加密工具就像丑陋的黑客 对字符串进行加密这很好 但如果我们想加密一个文件 它并没有多大帮助 特别是对其他人解
  • 将对话框保持在窗口顶部,但不是在所有内容之上

    在我的 WPF 应用程序中 我有很多弹出的自定义对话框 以便用户可以使用以下命令执行各种操作someDialogClass ShowDialog 为了确保对话框位于调用它的窗口顶部 我添加Topmost True to the Window
  • 实体框架中使用 OR 条件的动态查询

    我正在创建一个应用程序来搜索数据库并允许用户动态添加任何条件 大约 50 个可能的条件 就像下面的问题一样 使用实体框架创建动态查询 https stackoverflow com q 5541234 810850 我目前正在进行一项检查每
  • 焦点事件发生变化?

    我正在将 Visual Basic 6 程序移植到 PyQt 我需要调用一个函数来设置某些小部件始终启用 禁用 我不想调用一个函数太多次 所以我发现了一个事件 当焦点从一个小部件更改为另一个小部件时 我可以调用我的小部件管理器功能 我正在
  • 在Python中的一个图中叠加热图

    我有两个 100x100 矩阵 u 0 and u 1 我已将两个数组的值设置在 0 和 1 之间 以使用 matplotlib 函数制作热图pcolormesh 我可以使用以下方法获得一张热图 fig1 plt pcolormesh u
  • 使用 loc 时的 Pandas SettingWithCopyWarning [重复]

    这个问题在这里已经有答案了 关于使用 loc 进行索引 切片分配的一般问题 假设以下数据帧 df df A B C 0 a b 1 a b 2 b a 3 c c 4 c a 重现代码 df pd DataFrame A list aabc
  • 如何在 SQL Server 中转置查询结果(行到列)

    我的查询给出的结果如下 所以 我想将结果转换成这样 请注意带有 NULL 值的交叉字段 PIVOT 是实现这一目标的方法 一开始它可能会令人困惑 至少对我来说是这样 https www codeproject com Tips 500811
  • 使用 PHP cURL 进行缓存

    我正在使用 PHP cURL 从另一个网站获取信息并将其插入到我的页面中 我想知道是否可以将获取的信息缓存在我的服务器上 例如 当访问者请求某个页面时 系统会获取该信息并在我的服务器上缓存 24 小时 然后 该页面将完全在本地提供 24 小
  • 在虚拟环境中将包安装到全局站点包中

    让我先声明我已阅读过pip 安装在全局站点包中而不是 virtualenv https stackoverflow com questions 20952797 pip installing in global site packages
  • PySpark - 按列的值拆分/过滤 DataFrame

    我有一个与此示例类似的 DataFrame Timestamp Word Count 30 12 2015 example 1 3 29 12 2015 example 2 1 28 12 2015 example 2 9 27 12 20
  • 跨 docker 容器共享内存

    如果使用 Java MQ 类 而不是 JTA 将 Websphere MQ 用作 XA 分布式事务 事务管理器 则 Java 应用程序和 WMQ 都需要驻留在同一主机上 有人告诉我这是因为共享内存被用作进程间通信机制 Java 应用程序和
  • 将 Iterator<(A,B)> 拆分为 Iterator 和 Iterator

    我想分割实现的对象的输出Iterator lt A B gt 分成两个实现的对象Iterator a and Iterator b 由于其中一个输出的迭代次数可能多于另一个 因此我需要缓冲Iterator lt A B gt 因为我不能依赖
  • 将 Patreon API 与 Flutter 应用程序链接

    我对使用 Flutter 很陌生 在没有帮助的情况下从未正确使用过 API 我想让我的应用程序免费 没有大量广告 所以我希望创建一个 Patreon 来支持它的维护 当在线寻找教程视频或任何可用于 Flutter 或我知道如何使用的其他语言
  • 解释错误:“构造函数……无法应用:实际长度和形式长度不同”

    请帮我修复这个错误 类 C10h1 CollegeMember 中的构造函数 CollegeMember 不能 适用于给定类型 必需 java lang String java lang String 发现 没有参数 原因 实际论证和形式论
  • 在 Javascript 中增加 CSS padding-top 属性

    我有一个 CSS 定义为div myDiv padding top 20px padding bottom 30px 在 JS 函数中 我想增加padding top by 10px function DoStuff var myDiv d
  • Pandas 中的固定宽度文件操作

    我有一个具有以下格式的固定宽度文件 5678223313570888271712000000024XAXX0101010006461801325345088800 0784001501 25abc yahoo com 56782233246
  • Spring Mongodb使用DBRef关联获取数据

    我有一个带有嵌套 dbref 地址的零售商类 我想根据属于地址类一部分的城市获取零售商 但我遇到了以下错误 org springframework data mapping model MappingException 路径无效 参考地址
  • 在 Doctrine 中向当前表添加虚拟列?

    我正在使用 Doctrine 1 2 和 Symfony 1 4 假设我有一个用户模型 其中有一个配置文件 这些定义为 User id username password 创建时间 更新时间 Profile id user id 名 姓 a