Doctrine 1.4使用fromArray()填充关系集合

时间:2014-08-22 18:18:29

标签: doctrine

我在Doctrine 1.4中执行了原始SQL查询(为了获得高级子查询)并使用来自不同表(评估和用户)的数据获得了连接结果集:

(这就是我在数组中的所有内容:$ all:)

id  user_id guide_id    group_id    level   date    score   max_score   last_improvement    total_improvement   created_at  updated_at  email   password    salt    first_name  last_name   is_active   is_super_admin  last_login  verified_email  entity_type entity_name country_id  state_id    source  raw preferences evaluation_count
52  52  2   2001    1   2014-06-19  245 245         2014-05-19 16:24:31 2014-08-08 17:13:20 martin@mindset3.com 040000000000000secret0000b  4da00nothingtoseehere067c   Martín (municipio)  1   1       1   municipio   Martincipio 0                                               0   12              17
52  52  2   2002    1   2014-06-26  122 170 -48 -48 2014-05-19 16:24:31 2014-08-08 17:13:20 martin@mindset3.com 0000000000000000000000009b  4d00000movealong000c0c67c   Martín (municipio)  1   1       1   municipio   Martincipio 0                                               0   12              17

所以我做了:

$ret = new Doctrine_Collection('Evaluation');
$ret->fromArray($all);

成功填充了"评估"的集合,但我还需要"用户"与每个评估相关联。我需要的信息已经存在于结果集中,但该集合不会自动为每个Evaluation对象创建User对象。

然后在视图中我引用了打印用户名的关系,而Doctrine执行了大量非必要的查询。

我知道有几种方法可以避免这种情况,但更自然的方式(我认为)是通过相关对象的填充然后以常规方式访问它们。

怎么办呢?

1 个答案:

答案 0 :(得分:0)

我明白了。

我必须自己迭代结果集创建一个“User”对象,然后再将其输入Evaluation::fromArray()

以下是:

$q->execute($params);
$all = $q->fetchAll(PDO::FETCH_ASSOC);
Utilities::array2table($all);   // here I print the raw PDO resultset to debug it

foreach($all as $k => $v){
    $u = new User();
    $u->fromArray($v);
    $all[$k]['User'] = $u;
    // Create a Doctrine "User" and append it to the resultset
}

// Now create the evaluations just like I was before:

$ret = new Doctrine_Collection('Evaluation');
$ret->fromArray($all);
return $ret;