gpt4 book ai didi

join - 将虚拟列添加到 Doctrine 中的当前表?

转载 作者:行者123 更新时间:2023-12-04 12:00:12 25 4
gpt4 key购买 nike

我在 Symfony 1.4 中使用 Doctrine 1.2。假设我有一个 User 模型,它有一个 Profile。这些定义为:

用户:

  • id
  • 用户名
  • 密码
  • created_at
  • updated_at

  • 轮廓:
  • id
  • 用户 ID
  • 名字
  • 姓氏
  • 地址
  • 城市
  • postal_code

  • 我通常会得到这样的数据:
    $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"
    )
    )

    但是,我希望用户包含“虚拟”列(不确定这是否是正确的术语),这样 Profile 中的字段实际上看起来就像是 User 的一部分。换句话说,我希望 print_r 语句看起来更像:
    Array (
    "User" => Array (
    "id" => 1,
    "username" => "jschmoe",
    "first_name" => "Joseph",
    "last_name" => "Schmoe"
    )
    )

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

    最佳答案

    做你想做的事情的方法是使用 custom Hydrator .

    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();
    }
    }

    然后使用连接管理器注册您的 hydrator:
    $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"
    )
    )

    您可能需要对 hydrator 逻辑稍加调整才能获得所需的确切数组结构。但这是做你想做的事情的可接受的方式。

    关于join - 将虚拟列添加到 Doctrine 中的当前表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4890933/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com