我在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执行了大量非必要的查询。
我知道有几种方法可以避免这种情况,但更自然的方式(我认为)是通过相关对象的填充然后以常规方式访问它们。
怎么办呢?
答案 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;